Comment définir GIT_DIR & GIT_WORK_TREE lors de l'entretien de plusieurs référentiels
Comme cette SORTE de post, j'ai le flux de travail suivant que je tiens à maintenir avec git:
- Plusieurs personnes développent localement
- Commettre quelques choses
- Commettre plus de choses
- Pousser à la mise en scène
- Test nouveau code de mise en scène
- Pousser à la Production
Notre serveur de test sert de nombreux sites différents. Je tiens à mettre en place le référentiel de chaque dans un autre dossier dans le répertoire home de l'utilisateur. Chaque dépôt aura un post-recevoir crochet (ala Daniel Messier article) qui vérifie les changements dans la racine web pour ce site/dépôt.
C'est le numéro six, qui me donne de l'ennui.
Lorsque j'essaie d'exécuter toutes les commandes git, j'obtiens l'erreur "fatal: Cette opération doit être exécutée dans un travail d'arbre". J'obtiens cette erreur si je suis en cours d'exécution 'git status' dans le référentiel (/home/gituser/web1.git - ce que je ne crois pas que devraient travailler de toute façon..) ou à partir de la racine web (/var/www/web1).
Cependant, si je spécifie le GIT_DIR et GIT_WORK_TREE, alors que je suis en mesure d'exécuter des commandes git. Deux de ces travaux:
$ git --git-dir /home/gituser/website1.git --work-tree /var/www/website1 status
$ GIT_DIR=/home/gituser/website1.git GIT_WORK_TREE=/var/www/website1 git status
J'ai donc besoin de:
- Une alternative à la saisie du répertoire et de travail de l'arbre avec chaque commande
- Une alternative à leur mise persistante des variables d'environnement, parce que cela ne fonctionne que pour web1, pas 2, website3, etc
Suis-je le faire correctement? Comment puis-je obtenir git le répertoire info dont il a besoin pour chaque référentiel?
OriginalL'auteur doub1ejack | 2012-05-30
Vous devez vous connecter pour publier un commentaire.
Si je comprends bien, vous avez un dépôt différent pour chaque site web racine. Si c'est le cas, vous pouvez définir le travail de l'arborescence du référentiel de niveau (dans le
.git/config
fichier):core.worktree
. Il ne fonctionnera pas si l'opération est configuré commebare
:Une fois que c'est réglé, commandes Git (comme
git status
) devrait fonctionner à partir du dépôt du dossier de nouveau, et toutes les commandes qui utilisent le travail de l'arbre (git status
,git checkout
, etc.) va utiliser lacore.worktree
emplacement. (Notez que les commandes Git ne fonctionne toujours pas, à partir de l'emplacement dans l'arborescence de travail, parce que ce n'est pas un référentiel.)OriginalL'auteur ellotheth
Juste une suggestion.
Mettre en œuvre un fichier de script appelé "git" qui est placé dans un répertoire qui précède, l'utilisateur du chemin avant le git exécutable dans /usr/bin. git, le shell script, c'est juste un wrapper mince sur le dessus de /usr/bin/git. La première chose qu'il fait est de détecter ce répertoire git est appelé et tente de s'auto-déterminer ce qu'repo il est en train de travailler. Peut-être en ayant un "mon.config" fichier dans la racine de chaque dépôt que le script peut lire. Ensuite, le script appelle le "/usr/bin/git --git-dir" et définit GIT_DIR et GIT_WORK_TREE vars, puis appelle /usr/bin/git avec la même ligne de commande params.
OriginalL'auteur selbie
Trois options:
1) Ajouter un alias local:
$ git config alias.root '!pwd'
2) Ajouter un global alias ($HOME/.gitconfig):
3) script, findgitroot.sh e.g
L'Option 1 sera pour git config. Cependant, depuis lors, j'ai trouvé de nombreuses autres options: 3) git config alias.root '!pwd' (cela vous donnera git "racine" de commande avec les résultats souhaités) 4) git rev-parse --show-toplevel
Merci! Donc pour le 3), vous pouvez utiliser
git root commit -am "Commit Msg"
au lieu degit commit -am "Commit Msg"
.Umm. pas de. Vous allez utiliser ce nouvel alias pour juste trouver où la racine est directement, comme ceci: '$ git racine " ou " cd
git root
etc.OriginalL'auteur FractalSpace
Vous pouvez toujours appuyer sur la touche flèche vers le haut pour obtenir tout ce que info et puis il suffit de supprimer la commande et de le remplacer par un autre. Vous ne devriez pas avoir à retaper le texte en entier.
Si vous avez émis un certain nombre d'autres commandes et ne veulent pas de "haut" à travers l'histoire, trop, vous pouvez appuyer sur CTRL-R et commencez à taper "arbre" ou "travail". Vous devriez obtenir le point de l'histoire où l'un de ces a été exécuté.
Sinon, le script de création de ces variables comme l'a déjà suggéré.
OriginalL'auteur Adam Dymitruk