Eu estava procurando uma maneira de executar o comando git a partir de um caminho e fazer alterações no repositório em um caminho diferente. Então, acabei nesta pergunta aqui.
Mas, para minhas necessidades específicas, nem a resposta aceita nem nenhuma das outras ajudaram.
Eu precisava executar comandos git usando sudo -u USER /usr/bin/git
(outro usuário executando). E como você deve saber, o sudo não me permite executar o cd
comando, então não posso estar no diretório do repositório.
Então, eu fui para a página de manual do git . E entre as opções, vi o --git-dir=<path>
:
--git-dir =
Defina o caminho para o repositório. Isso também pode ser controlado pela configuração da variável de ambiente GIT_DIR. Pode ser um caminho absoluto ou relativo ao diretório de trabalho atual.
Portanto, se isso ajudar alguém, você ainda poderá usar o git de um caminho e fazer alterações em um repositório "longe de você". Apenas use:
git --git-dir=/path/to/repository GIT_COMMAND
ou, para executá-lo como outro usuário, faça algo como:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Também na página do manual do git-init :
Se a variável de ambiente $ GIT_DIR estiver configurada, ela especificará um caminho a ser usado em vez de ./.git para a base do repositório.
Portanto, se você deseja iniciar o repositório na pasta .git usual, precisará especificá-lo junto com a --git-dir
opção por exemplo:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Após inicializar o repositório /path/to/repo/.git
, todos os comandos adicionais devem ter a opção --work-tree=<path>
, conforme descrito na página de manual do git:
--work-tree =
Defina o caminho para a árvore de trabalho. Pode ser um caminho absoluto ou relativo ao diretório de trabalho atual. Isso também pode ser controlado pela configuração da variável de ambiente GIT_WORK_TREE e da variável de configuração core.worktree (consulte core.worktree em git-config (1) para uma discussão mais detalhada).
Portanto, o comando certo para executar o git como outro usuário e inicializar um novo repositório é:
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