Je cherchais un moyen d'exécuter la commande git à partir d'un chemin et d'apporter des modifications au référentiel dans un chemin différent. Donc je me suis retrouvé dans cette question ici.
Mais pour mes besoins spécifiques, ni la réponse acceptée ni aucune des autres ne m'aident.
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 d’exécuter la cd
commande, je ne peux donc pas être dans le répertoire du référentiel.
Donc, je suis allé à la page de manuel de git . Et parmi les options, j'ai vu le --git-dir=<path>
:
--git-dir =
Définissez le chemin d'accès au référentiel. Cela peut également être contrôlé en définissant la variable d’environnement GIT_DIR. Il peut s'agir d'un chemin absolu ou relatif vers le répertoire de travail actuel.
Donc, si cela aide quelqu'un, vous pouvez toujours utiliser git depuis 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'utilisateur différent, procédez comme suit:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Également sur 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 référentiel sous le dossier .git habituel, vous devez le spécifier avec l' --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 l’initialisation du référentiel /path/to/repo/.git
, toutes les commandes ultérieures devraient avoir l’option --work-tree=<path>
, comme décrit sur la page de manuel de git:
--work-tree =
Définissez le chemin d'accès à l'arbre de travail. Il peut s'agir d'un chemin absolu ou d'un chemin relatif au répertoire de travail en cours. Cela 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).
Ainsi, la bonne commande pour exécuter git en tant qu'utilisateur différent et initialiser un nouveau référentiel est la suivante:
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