Você não pode simplesmente "cd / home / repo && git log" como sua chamada executiva?
Alex Howansky
Eu tenho alguns problemas estranhos com isso. Estou iniciando um novo processo, não realmente um executivo, mas não sei muito bem como eles diferem. Acho mais fácil encontrar apenas um parâmetro para especificar o diretório git.
Eu continuo recebendo fatal: Not a git repository (or any of the parent directories): .git. @ Patrick Eu não votei em nada?
Torre
3
@Patrick A resposta foi editada (originalmente disse que --work-direu acho)
Gareth
1
Isso não funcionou para mim, pois mostrou todos os arquivos da confirmação como excluídos. Parece que está verificando o commit, mas não o conteúdo da pasta. Consulte a resposta de @calandoa para obter um melhor desempenho.
Mxcd 5/05/19
2
Não funcionou para mim usando a última git, porém com a opção -C funcionou, exemplo: git -C /home/repo/.git log
D.Snap
1
isso realmente não funcionou como o po esperava. por que essa resposta é aceita? Isso usará o diretório atual como árvore de trabalho e usará o .git especificado para o histórico, o que está completamente errado. Se você não mostrar apenas o log, por exemplo git status,. -Cé o caminho correto a seguir.
Isso é quase equivalente --git-dire --work-treesem anexar a .gitpasta usual
Editar:
Resposta com voto negativo ... bastante surpreendente, pois, estritamente falando, esta é a única resposta correta para a pergunta. As opções --git-dire --work-treenão existem para acessar o repositório de fora da árvore de trabalho, são usadas para mover o.git outro lugar e são muito mais complicadas de usar em alguns casos.
Por exemplo, para obter apenas o log /home/repo/subdir:
git -C /home/repo/subdir log .
ou
git -C /home/repo log subdir
Não é possível usar log .com --git-dirou --work-tree. O caminho deve ser processado para extrair o subcaminho em relação à parte superior da árvore de trabalho e, mesmo nesse caso, o git não o reconhecerá como um caminho se você não usar a --opção, portanto, a única maneira possível é:
git --git-dir /home/repo/.git log -- subdir
Além disso, --work-treenão está funcionando com o logsubcomando com a minha versão (git 1.9.1). É apenas ignorado:
git stashé outro exemplo de um subcomando que falha se --git-dire --work-treeé usado.
d5ve
4
A opção -C foi adicionado na versão 1.8.5 do git, que foi lançado em 2013.
d5ve
-C funcionou melhor do que --git-dir para mim ... -C honra as definições de configuração do git para o repositório. Estou executando a versão git 1.9.5.msysgit.1
straff
@calandoa sempre precisamos especificar o local a partir da raiz, mais uma coisa, se o nome do repositório contiver várias palavras como
inserimos
17
De fato, você precisa usar --git-dir e --work-tree juntos. Aqui está um exemplo:
local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di
Isso é semelhante à resposta do @ max. Infelizmente, --git-dir não fez o que eu precisava. editar Em retrospecto, outra resposta [anterior] que eu não tinha lido sugeriu o uso --work-tree. Não tenho certeza se o uso de ambiente ou sinalizadores é mais apropriado, portanto deixarei minha resposta caso alguém encontre uso nele, mas mudarei para usar --work-tree/ --git-dir.
Há dois repositórios, um dentro do outro, mas não um submódulo; o repositório externo o ignora:
tools (outer repo)
gcc/4.9.2 (inner repo)
O que eu queria era a saída de em git rev-parse --show-prefixrelação ao repositório externo. Aqui está o que eu criei (sintaxe do bash; dividida em linhas para facilitar a leitura):
Respostas:
Experimentar:
É importante fornecer o caminho até o diretório .git do seu repositório. Caso contrário, você receberá apenas uma mensagem de erro que diz algo como:
fonte
fatal: Not a git repository (or any of the parent directories): .git
. @ Patrick Eu não votei em nada?--work-dir
eu acho)git status
,.-C
é o caminho correto a seguir.Use a
-C
opção ( documentos ):Isso é quase equivalente
--git-dir
e--work-tree
sem anexar a.git
pasta usualEditar:
Resposta com voto negativo ... bastante surpreendente, pois, estritamente falando, esta é a única resposta correta para a pergunta. As opções
--git-dir
e--work-tree
não existem para acessar o repositório de fora da árvore de trabalho, são usadas para mover o.git
outro lugar e são muito mais complicadas de usar em alguns casos.Por exemplo, para obter apenas o log
/home/repo/subdir
:ou
Não é possível usar
log .
com--git-dir
ou--work-tree
. O caminho deve ser processado para extrair o subcaminho em relação à parte superior da árvore de trabalho e, mesmo nesse caso, o git não o reconhecerá como um caminho se você não usar a--
opção, portanto, a única maneira possível é:Além disso,
--work-tree
não está funcionando com olog
subcomando com a minha versão (git 1.9.1). É apenas ignorado:Eu nem entendo se isso é um bug ou um recurso ... como sempre, com muitas opções de design do git.
fonte
git stash
é outro exemplo de um subcomando que falha se--git-dir
e--work-tree
é usado.De fato, você precisa usar --git-dir e --work-tree juntos. Aqui está um exemplo:
fonte
Eu tentei muitas vezes! Eu finalmente entendi!
git -C dir --no-pager log --format='%an' -1 filename
lembre-se, por favor, não adicione .git ao seu
fonte
Isso é semelhante à resposta do @ max. Infelizmente, --git-dir não fez o que eu precisava. editar Em retrospecto, outra resposta [anterior] que eu não tinha lido sugeriu o uso
--work-tree
. Não tenho certeza se o uso de ambiente ou sinalizadores é mais apropriado, portanto deixarei minha resposta caso alguém encontre uso nele, mas mudarei para usar--work-tree
/--git-dir
.Há dois repositórios, um dentro do outro, mas não um submódulo; o repositório externo o ignora:
O que eu queria era a saída de em
git rev-parse --show-prefix
relação ao repositório externo. Aqui está o que eu criei (sintaxe do bash; dividida em linhas para facilitar a leitura):Quando executado a partir do 4.9.2, produz a string
gcc/4.9.2
.fonte
Para qualquer comando git, você pode:
Por exemplo, se você deseja fazer um status git:
ou se você deseja verificar a filial em que o repo está:
fonte