git –git-dir não está funcionando como esperado

Eu estou tentando executar git de um diretório diferente do que eu estou dentro Então, por exemplo, se eu estou em:

cd /home/domain/ git status << runs perfect ie # On branch master # Your branch is ahead of 'origin/master' by 6 commits. 

Então agora eu quero executar este comando de um diretório diferente usando a opção --git-dir .

Então digamos que estou na root/ e tente isto:

 git --git-dir="/home/domain/" status ## Error fatal: Not a git repository: '/home/domain/' 

Eu também tentei include a pasta .git ou seja

 git --git-dir="/home/domain/.git/" status 

Mas parece que está tentando executar o git a partir da raiz, ou seja, excluindo tudo da pasta do meu domínio e adicionando tudo no root.

Espero que alguém possa aconselhar sobre o que estou fazendo de errado.

Você também tem que definir o diretório de trabalho. Confuso eu sei, mas é uma coisa de flexibilidade.

 git --git-dir=/mycode/.git --work-tree=/mycode status 

Você pode ler um pouco mais aqui

Iniciando o git 1.8.5 (que deve sair na próxima semana), será ainda mais simples:

  git -C "/home/domain/" status 

Não há necessidade de definir --git-dir e --work-tree mais!


Veja commit 44e1e4 por Nazri Ramliy :

É preciso mais pressionamentos de teclas para invocar o comando git em um diretório diferente sem sair do diretório atual:

  1. (cd ~/foo && git status)
    git --git-dir=~/foo/.git --work-dir=~/foo status
    GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  2. (cd ../..; git grep foo)
  3. for d in d1 d2 d3; do (cd $d && git svn rebase); done

Os methods mostrados acima são aceitáveis ​​para criação de scripts, mas são muito incômodos para chamadas de linha de comando rápidas.

Com essa nova opção, o acima pode ser feito com menos pressionamentos de tecla:

  1. git -C ~/foo status
  2. git -C ../.. grep foo
  3. for d in d1 d2 d3; do git -C $d svn rebase; done

Com base no seu comentário acima, parece que você ainda está com um problema:

 root @ erx [/] # git --git-dir = / home / domínio / .git --work-tree = / home / domínio / pull origem mestre
 fatal: / usr / local / libexec / git-core / git-pull não pode ser usado sem uma tree de trabalho

Parece que você pode ter a intenção de executar isso de crontab ou algo assim. Você pode estar melhor usando cd para mudar para o seu diretório de trabalho primeiro. Por exemplo:

 root @ erx [/] # (cd / home / domain && git pull mestre de origem)

Isto irá temporariamente (em um subshell, que é o que os parênteses fazem) muda o diretório atual para /home/domain , e então executa o git pull origin master . Depois que o comando for concluído, seu diretório atual permanecerá o que estava antes do comando.