git pull tout en n'étant pas un répertoire git
Disons que j'ai un répertoire, /X/Y
, qui est un dépôt git. Est-il possible d'appeler d'une certaine manière une commande comme git pull
de l'intérieur /X
, mais le ciblage de la /X/Y
répertoire?
EDIT: je suppose que je me demandais en particulier: est-il possible de le faire à l'aide de la commande git, mais sans avoir à modifier les répertoires?
REMARQUE: j'ai accepté VonC réponse car il est beaucoup plus élégante que la précédente options. Pour les personnes en cours d'exécution Git âgés de plus de 1.8.5, veuillez consulter bstpierre la réponse ci-dessous.
- Je tiens à ajouter que lors de l'utilisation de git pull à l'intérieur d'un crochet ne fonctionnera pas, sauf si vous enlevez GIT_DIR. Relevant.
- Départ git 1.8.5 (T4 2013), vous serez en mesure d'utiliser une "commande git, mais sans avoir à modifier les répertoires". Voir ma réponse ci-dessous
Vous devez vous connecter pour publier un commentaire.
De départ git 1.8.5 (T4 2013), vous serez en mesure d'utiliser une "commande Git, mais sans avoir à modifier les répertoires".
Voir s'engager 44e1e4 par Nazri Ramliy:
Depuis Git 2.3.4 (Mars 2015), et s'engager 6a536e2 par Karthik Nayak (
KarthikNayak
),git
traitent "git -C '<path>'
" comme un no-op quand<path>
est vide.apt-get install software-properties-common python-software-properties
puis ajouter le repo gitadd-apt-repository ppa:git-core/ppa
. La dernière étape consiste à mettre à jour git:apt-get update && apt-get upgrade
.git -C */default pull
🙁 quelqu'un?--git-dir=foo/.git
,--work-tree=foo
, le-C
option semble couvrir, merci.~
dans le chemin d'accès, utilisez le$HOME
ou le chemin complet ou relatif chemin sera ok.~
fonctionne très bien lorsqu'il est utilisé avec-C
.git -C ~/path/to/other/git/repo remote -v
devrait fonctionner.Modifier:
Il y a un bug avec
git pull
, ou vous ne pouvez pas faire ce que vous essayez de faire avec cette commande. Vous peut cependant, de le faire avec d'extraction et de fusion:Réponse originale à cette question:
En supposant que vous utilisez bash ou similaire, vous pouvez le faire
(cd /X/Y; git pull)
.La git page de man spécifie certaines variables (voir "git") qui semblent comme ils devraient l'aider, mais je ne peux pas leur faire le travail à droite (avec mon dépôt dans /tmp/ggg2):
L'exécution de la commande ci-dessous, tandis que mon mdc est /tmp mises à jour de repo, mais la mise à jour du fichier apparaît dans /tmp au lieu de l'arbre de travail /tmp/ggg2:
Voir aussi cette réponse à une question similaire, ce qui démontre la
--git-dir
et--work-tree
drapeaux..git
répertoire.git --git-dir=/tmp/ggg2/.git --work-tree=/tmp/ggg2 pull
, je reçois un message d'erreur. Mais si je negit --git-dir=/tmp/ggg2/.git --work-tree=. pull
alors que je suis dans /tmp, il met à jour les fichiers dans /tmp comme il se doit.--work-tree
maintenant, comme--work-tree=/tmp/ggg2/
et--work-tree=/tmp/ggg2/.
car il pourrait être un problème avec la façon dont son analyse de la trajectoire.cd
s jusqu'à ce que j'ai essayé ta solution et ça a fonctionnégit --git-dir=${HOME}/repo/.git pull
fonctionne très bien.cd
.Vous pouvez l'envelopper dans un script bash ou git alias:
pushd/popd
paire au lieu decd/cd-
Ce post est un peu vieux alors peut-être il y avait un bug andit a été résolu, mais j'ai juste fait:
Et cela a fonctionné. M'a pris une minute pour comprendre qu'il voulait que le dotfile et le répertoire parent (dans une configuration standard est toujours le parent/enfant, mais pas dans TOUTES les configurations, de sorte qu'ils doivent être explicitement spécifié.
Comme certains de mes serveurs sont sur un vieux versions LTS d'Ubuntu, je ne peux pas mettre à jour très facilement git pour la dernière version (qui prend en charge l'option-C, comme décrit dans certaines réponses).
Cette astuce fonctionne bien pour moi, surtout parce qu'il n'a pas les effets secondaires de certains autres réponses que de vous laisser dans un répertoire différent de là où vous avez commencé.
Ou, comme un one-liner:
À la fois Linux et Windows ont pushd et popd commandes.
Vous pouvez écrire un script comme ceci:
Vous pouvez l'appeler quelque chose comme
gitpull
.Si vous préférez avoir il ne arbitraire répertoires au lieu de
/X/Y
:Ensuite, vous pouvez l'appeler avec
gitpull /X/Z
Enfin, vous pouvez essayer de trouver des dépôts. J'ai un
~/git
dossier qui contient des dépôts, et vous pouvez l'utiliser pour faire un pull sur chacun d'eux.(cd /X/Y && git pull)
.Pour quelqu'un comme moi qui essayait de le faire via un drush (Drupal shell) de commande sur un serveur distant, vous ne serez pas en mesure d'utiliser la solution qui vous oblige à CD dans le répertoire de travail:
Au lieu de cela, vous devez utiliser la solution qui brise le tirer dans un fetch & fusion:
À l'aide de la combinaison
pushd
,git pull
etpopd
, nous pouvons obtenir cette fonctionnalité:Par exemple:
Cela pourrait être un problème similaire, mais vous pouvez aussi tout simplement de la chaîne de vos commandes. par exemple
Sur une ligne
Ou via SSH.