Stavo cercando un modo per eseguire il comando git da un percorso e apportare modifiche al repository in un percorso diverso. Quindi ho finito con questa domanda qui.
Ma per le mie esigenze specifiche né la risposta accettata né nessuna delle altre ha aiutato.
Avevo bisogno di eseguire i comandi git utilizzando sudo -u USER /usr/bin/git
(un altro utente che lo esegue). E come forse sapete, sudo non mi permette di eseguire il cd
comando, quindi non posso essere nella directory repository.
Quindi, sono andato alla pagina man di git . E tra le opzioni, ho visto --git-dir=<path>
:
--git-dir =
Imposta il percorso per il repository. Questo può anche essere controllato impostando la variabile d'ambiente GIT_DIR. Può essere un percorso assoluto o relativo alla directory di lavoro corrente.
Quindi, se aiuta qualcuno, puoi comunque usare git da un percorso e apportare modifiche a un repository "lontano da te". Usa solo:
git --git-dir=/path/to/repository GIT_COMMAND
oppure, per eseguirlo come un altro utente, fai qualcosa del tipo:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Anche dalla pagina man di git-init :
Se la variabile di ambiente $ GIT_DIR è impostata, specifica un percorso da utilizzare anziché ./.git per la base del repository.
Quindi, se si desidera avviare il repository nella normale cartella .git, sarà necessario specificarlo insieme --git-dir
all'opzione. per esempio:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Dopo aver inizializzato il repository su /path/to/repo/.git
, tutti gli altri comandi dovrebbero avere l'opzione --work-tree=<path>
, come descritto nella pagina man di git:
--work-albero =
Imposta il percorso per l'albero di lavoro. Può essere un percorso assoluto o un percorso relativo alla directory di lavoro corrente. Questo può anche essere controllato impostando la variabile d'ambiente GIT_WORK_TREE e la variabile di configurazione core.worktree (vedi core.worktree in git-config (1) per una discussione più dettagliata).
Quindi, il comando giusto per eseguire git come un altro utente e inizializzare un nuovo repository è:
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