Estaba buscando una manera de ejecutar el comando git desde una ruta y hacer cambios en el repositorio en una ruta diferente. Así que terminé en esta pregunta aquí.
Pero para mis necesidades específicas, ni la respuesta aceptada ni ninguna de las otras me ayudaron.
Necesitaba ejecutar comandos git usando sudo -u USER /usr/bin/git
(otro usuario lo ejecuta). Y como sabrán, sudo no me permite ejecutar el cd
comando, por lo que no puedo estar en el directorio del repositorio.
Entonces, fui a la página de manual de git . Y entre las opciones, vi el --git-dir=<path>
:
--git-dir =
Establecer la ruta al repositorio. Esto también se puede controlar configurando la variable de entorno GIT_DIR. Puede ser una ruta absoluta o relativa al directorio de trabajo actual.
Entonces, si ayuda a alguien, aún puede usar git desde una ruta y hacer cambios en un repositorio "lejos de usted". Solo usa:
git --git-dir=/path/to/repository GIT_COMMAND
o, para ejecutarlo como otro usuario, haga algo como:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
También de la página de manual de git-init :
Si se establece la variable de entorno $ GIT_DIR, especifica una ruta para usar en lugar de ./.git para la base del repositorio.
Por lo tanto, si desea iniciar el repositorio en la carpeta .git habitual, deberá especificarlo junto con la --git-dir
opción. p.ej:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Después de inicializar el repositorio /path/to/repo/.git
, todos los comandos adicionales deben tener la opción --work-tree=<path>
, como se describe en la página de manual de git:
--work-tree =
Establecer la ruta al árbol de trabajo. Puede ser una ruta absoluta o una ruta relativa al directorio de trabajo actual. Esto también se puede controlar configurando la variable de entorno GIT_WORK_TREE y la variable de configuración core.worktree (vea core.worktree en git-config (1) para una discusión más detallada).
Entonces, el comando correcto para ejecutar git como otro usuario e inicializar un nuevo repositorio es:
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