Comment puis-je exécuter plusieurs commandes git dans un fichier de commandes sans arrêt après la première commande?
J'ai essayé de mettre une série de commandes GIT que j'ai toujours utiliser continuellement togeter comme lot de fichiers, de sorte que je ne me répète pas trop. Par exemple, j'ai ce fichier batch appelé update_repo_branch.bat
pour mettre à jour un local repo et synch une branche avec la télécommande de la direction de la
@echo off
si(%1) == () goto fin
si(%2) == () goto fin
cd %1
git checkout %2
git fetch origin
git merge oring/%2
:fin
Bon d'être paresseux, mais ce que j'ai trouvé est que lorsqu'une commande GIT est fini, il semble envoyer une sortie de drapeau de retour pour mettre fin à ce que est en cours d'exécution. Donc, à l'aide d'un fichier batch pour exectute tous d'un coup ne fonctionne simplement pas. Une idée de comment le contourner?
- ainsi, seule la
git checkout
est-il effectué?
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr si cela est vrai pour toutes les Fenêtres git paquets, mais au moins certains utilisent un
git.cmd
script comme un wrapper autour de la réelle git exécutables (par exemplegit.exe
). Ainsi, lorsque vous êtes fichier batch utilise ungit
de commande, Windows est en train de tourner un autre fichier de commandes.Malheureusement, quand un fichier de commandes appelle un autre, par défaut, il "sauts" à l'invoquée fichier de commandes, pour ne jamais revenir (c'est pour la compatibilité avec les anciens de commande MS-DOS processeurs ou quelque chose).
Vous pouvez résoudre ce problème de deux façons:
invoquer
git
dans vos fichiers batch à l'aide de lacall
commande pour exécuter legit.cmd
fichier de commandes et de retour à la vôtre:invoquer
git
dans votre fichier de commandes à l'aide de la.exe
extension explicitement pour éviter lagit.cmd
fichier de lot au total. Pour que cela fonctionne, vous pourriez avoir besoin pour vous assurer que vous avez votre chemin et d'autres variables d'environnement définies de la façongit.exe
attend (qui semble être ce quegit.cmd
n'en msysgit):call
n'a rien d'étonnant avec les programmes normaux, c'est en fait, une bonne façon d'éviter cela, indépendamment de ce quegit
ils utilisent (ne connaissais même pas il y avait tant que ça).git
est en effet un script batch. Unexe
programme est guère attendre de se comporter comme ça. Et je suis d'accord avec Joey,CALL
ne serait pas mal, même si le programme n'a à son tour d'être unexe
.Que je vois de votre exemple vous êtes en train d'essayer de synchroniser votre succursale locale 'branchname' avec origin/branchname
Pour cela, vous n'avez pas besoin de script, vous avez juste à utiliser
git pull
au lieu de la séquencegit checkout branchname; git fetch origin; git merge origin/branchname
prendre un coup d'oeil à la documentation sur le suivi des branches de git et de leurs avantages.
en règle générale, si vous avez une pension de mise en page comme ceci:
Et votre dev1 et dev2 branches de suivi des branches de l'origine/dev1 et origine/dev2 en conséquence, vous aurez besoin d'exécuter dans le référentiel:
Cette commande aura pour effet de synchroniser tous vous local de suivi des branches les plus éloignés.
pour en savoir plus voir ici:
Git pull docs
Git remote branches et de suivi des branches (Progit livre)
En supposant que vous utilisez msysGit comme votre client de Git, vous pourriez voulez vraiment utiliser des scripts Bash pour cela. Vous pouvez placer un bash fonction de votre
~/.bashrc
(~ est généralement de votre C:\Users\- voir ici) comme suitVous pouvez ensuite exécuter
update_repo_branch myrepo cool-branch
de la mysysGit shell.Bien sûr, ce ne sera pas accessible à partir de cmd.exe. Vous ne serez capable de l'utiliser à l'intérieur de la msysGit shell cygwin.