Je cherchais un moyen d'exécuter la commande git à partir d'un chemin, et d'apporter des modifications au dépôt dans un chemin différent. J'ai donc abouti à cette question ici.
Mais pour mes besoins spécifiques, ni la réponse acceptée ni aucune autre n'a été utile.
J'avais besoin d'exécuter des commandes git en utilisant sudo -u USER /usr/bin/git
(un autre utilisateur qui l'exécute). Et comme vous le savez peut-être, sudo ne me permet pas de lancer l'application cd
commande, donc je ne peux pas être dans le répertoire du référentiel.
Alors, je suis allé à la page de manuel de git . Et parmi les options, j'ai vu le --git-dir=<path>
:
--git-dir=
Définir le chemin d'accès au référentiel. Ceci peut également être contrôlé en définissant la variable d'environnement GIT_DIR. Il peut s'agir d'un chemin absolu ou d'un chemin relatif au répertoire de travail actuel.
Ainsi, si cela peut aider quelqu'un, vous pouvez toujours utiliser git à partir d'un chemin et apporter des modifications à un dépôt "loin de vous". Il suffit d'utiliser :
git --git-dir=/path/to/repository GIT_COMMAND
ou, pour l'exécuter en tant qu'autre utilisateur, faites quelque chose comme :
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Également de La page de manuel de git-init :
Si la variable d'environnement $GIT_DIR est définie, elle spécifie un chemin à utiliser à la place de ./.git pour la base du référentiel.
Ainsi, si vous souhaitez initialiser le dépôt dans le dossier .git habituel, vous devrez le spécifier avec l'attribut --git-dir
option. Par exemple :
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Après avoir initialisé le référentiel sur /path/to/repo/.git
toutes les autres commandes devraient avoir l'option --work-tree=<path>
comme décrit dans la page de manuel de git :
--work-tree=
Définissez le chemin vers l'arbre de travail. Il peut s'agir d'un chemin absolu ou d'un chemin relatif au répertoire de travail actuel. Ceci peut également être contrôlé en définissant la variable d'environnement GIT_WORK_TREE et la variable de configuration core.worktree (voir core.worktree dans git-config(1) pour une discussion plus détaillée).
Donc, la bonne commande pour lancer git en tant qu'autre utilisateur, et initialiser un nouveau dépôt est :
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' add /path/to/repository/*
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' commit -m 'MESSAGE'
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' remote add origin user@domain.com:path
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' push -u origin master