beaucoup comme Donc, post , j'ai le flux de travail suivant que j'aimerais entretenir avec Git:
Notre serveur de stockage sert de nombreux sites différents. Je voudrais configurer le référentiel pour chacun dans un dossier différent dans le répertoire de base d'un utilisateur. Chaque référentiel aura un crochet post-réception (ALA L'article Daniel Messier ) qui vérifie la Changements dans la racine Web de ce site / référentiel. P>
Il est numéro six qui me donne des problèmes. P>
Lorsque j'essaie d'exécuter des commandes git, je reçois l'erreur "Fatal: Cette opération doit être exécutée dans un arbre de travail". Je reçois cette erreur si je suis en train d'exécuter "statut git" dans le référentiel (/home/gituser/website1.git - que je ne crois pas devrait fonctionner de toute façon ..) ou de la racine Web (/ var / www / website1) . P>
Cependant, si je spécifie le git_dir et git_work_tree, je suis capable d'exécuter des commandes git. Ces deux fonctionnaires: p> donc j'ai besoin de: p> Suis-je à ce sujet correctement? Comment puis-je obtenir git les informations de répertoire dont il a besoin pour chaque référentiel? P> p>
4 Réponses :
Vous pouvez toujours appuyer sur la flèche vers le haut pour obtenir toutes ces informations, puis supprimez simplement la commande et remplacez-la par une autre. Vous ne devriez pas avoir besoin de retirer le tout. P>
Si vous avez émis un certain nombre d'autres commandes et que vous ne voulez pas trop "arrow" à travers l'historique, vous pouvez appuyer sur Ctrl-R et commencer à taper "arborescence" ou "travail". Vous devriez avoir le point de l'histoire où l'une d'entre elles était courue. P>
Sinon, le script définit ces variables comme déjà suggérées. P>
juste une suggestion. P>
Implémentez un fichier de script appelé "Git" qui est placé dans un répertoire qui précède le chemin de l'utilisateur avant l'exécutable GIT IN / USR / BIN. Git, le script Shell, est juste une mince emballage sur / usr / bin / git. La première chose à faire est de détecter quel répertoire git est appelé et essaie de déduire automatiquement ce qui se reproduit dans lequel il travaille. Peut-être en ayant un fichier "my.config" dans la racine de chaque référentiel que le script peut lire. Ensuite, le script appelle "/ usr / bin / git --git-dir" et définit git_dir et git_work_tree vars, puis appelle / usr / bin / git avec les mêmes paramètres de ligne de commande. P>
ooh, j'aime cette idée. Malheureusement, je ne suis pas bon pour écrire des scripts shell. Petite aide? :)
Si je comprends bien, vous avez un référentiel différent pour chaque racine Web. Si tel est le cas, vous pouvez définir l'arborescence de travail au niveau du référentiel (dans le fichier une fois que c'est défini, des commandes git (comme .git / config code>):
core.worktree code>. Il ne fonctionnera pas si le repo est configuré comme
nu code>:
statut GIT code>) Travaillez à nouveau sur le dossier de référentiel et toutes les commandes qui utilisent l'arborescence de travail (
Statut GIT CODE>,
GIT Checkout code>, etc.) utiliseront le
Core.worktree Code> Emplacement. (Notez que les commandes GIT ne fonctionneront toujours pas de l'emplacement de l'arborescence de travail, car ce n'est pas un référentiel.) P> p>
Merci. J'ai déjà essayé l'approche Config. Handworktree, mais je n'avais pas remarqué que Bare = Vrai.
trois options:
$ git config alias.root '! PWD' code> p>
2) Ajouter Un alias global ($ home / .gitconfig): h2>
3) un script, Findgitroot.sh, par exemple H2>
#!/bin/sh
f () { [[ -d ".git" ]] && echo "Found git in [`pwd`]" && exit 0; cd .. && f;}
f
Désolé d'être un idiot total ici - l'option 1, est-ce qu'un extrait pour .bash_profile ou git config? Merci encore de fournir quelques exemples à ce problème.
L'option 1 sera pour GIT CONFIG. Cependant, depuis lors, j'ai trouvé beaucoup d'autres options meilleures: 3) git config alias.root '! PWD' (cela vous donnera la commande "git root" avec les résultats souhaités) 4) Git Rev-parse --Show-toplevel
Merci! Donc, pour 3), vous utiliseriez Git root commit -am "commettez msg" code> au lieu de
git commit -am "commett msg" code>.
Umm. non. Vous utiliserez ce nouvel alias pour trouver simplement où la racine est directement, comme celle-ci: «$ root git 'ou' CD racine gitère code> etc.