Démarrage git 1.8.5 (Q4 2013) vous pourrez "utiliser une commande Git, mais sans avoir à changer de répertoire".
Tout comme " make -C <directory>
", " git -C <directory> ...
"dit à Git de s'y rendre avant de faire quoi que ce soit d'autre .
Voir commit 44e1e4 por Nazri Ramliy :
Il faut plus de touches pour invoquer la commande Git dans un répertoire différent sans quitter le répertoire actuel :
(cd ~/foo && git status) git --git-dir=~/foo/.git --work-tree=~/foo status GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
(cd ../..; git grep foo)
for d in d1 d2 d3; do (cd $d && git svn rebase); done
Les méthodes présentées ci-dessus sont acceptables pour l'écriture de scripts, mais sont trop lourdes pour des invocations rapides en ligne de commande.
Grâce à cette nouvelle option, les opérations ci-dessus peuvent être effectuées avec moins de frappes :
git -C ~/foo status
git -C ../.. grep foo
for d in d1 d2 d3; do git -C $d svn rebase; done
Depuis Git 2.3.4 (mars 2015), et commit 6a536e2 por Karthik Nayak ( KarthikNayak
) , git
traitera " git -C '<path>'
"en tant que no-op lorsque <path>
est vide.
' git -C ""
' meurt inutilement avec une erreur " Cannot change to ''
", alors que le shell traite cd ""' comme un no-op.
En prenant le comportement de l'obus comme précédent, enseigner git
de traiter -C ""' comme un no-op, également.
4 ans plus tard, Git 2.23 (Q3 2019) documente que ' git -C ""
' fonctionne et ne change pas de répertoire
Il se comporte ainsi depuis 6a536e2 ( git
: traiter " git -C '<path>'
" comme un no-op lorsque <path>
est vide, 2015-03-06, Git v2.3.4).
Cela signifie que la documentation comprend désormais (enfin) :
Si ' <path>
est présent mais vide, par exemple -C ""
le répertoire de travail actuel reste inchangé.
Vous pouvez voir git -C
utilisé avec Git 2.26 (Q1 2020), à titre d'exemple.
Voir commit b441717 , commit 9291e63 , commit 5236fce , commit 10812c2 , commit 62d58cd , commit b87b02c , commit 9b92070 , commit 3595d10 , commit f511bc0 , commit f6041ab , commit f46c243 , commit 99c049b , commettre 3738439 , comm. 7717242 , commit b8afb90 (20 déc. 2019) par Denton Liu ( Denton-L
) .
(fusionné par Junio C Hamano -- gitster
-- en commit 381e8e9 , 05 Feb 2020)
t1507
: inline full_name()
Signé par : Denton Liu
Auparavant, nous faisions fonctionner test_must_fail full_name
. Cependant, test_must_fail
ne doit être utilisé que pour les commandes git.
En ligne full_name()
afin que nous puissions utiliser test_must_fail
sur le git
directement.
En full_name()
a été introduite en 28fb84382b ("Introduire <branch>@{upstream}
notation", 2009-09-10, Git v1.7.0-rc0 -- fusionner ), le git -C
n'était pas encore disponible (puisqu'elle a été introduite en 44e1e4d67d (" git
: s'exécuter dans un répertoire donné avec l'option -C", 2013-09-09, Git v1.8.5-rc0 -- fusionner figurant sur la liste des lot n° 5 )).
Par conséquent, la fonction d'assistance a supprimé la nécessité d'effectuer manuellement les opérations suivantes cd
à chaque fois. Toutefois, étant donné que les git -C
est désormais disponible, nous pouvons l'utiliser à la place et intégrer la ligne full_name()
.
2 votes
J'aimerais ajouter que l'utilisation de git-pull dans un hook ne fonctionnera pas à moins que vous ne désactiviez GIT_DIR. Pertinent.
0 votes
À partir de git 1.8.5 (Q4 2013), vous pourrez "utiliser une commande git, mais sans avoir à changer de répertoire". Voir ma réponse ci-dessous