Status do Git - existe uma maneira de mostrar alterações apenas em um diretório específico?

136

Gostaria de ver uma lista de arquivos modificados desde a última confirmação, como git statusmostra, mas me importo apenas com arquivos localizados em um único diretório. Existe uma maneira de fazer isso? Eu tentei git status <directory>, mas parece que isso faz algo completamente diferente (lista todos os arquivos alterados, como seriam se eu escrevesse git add <directory>primeiro).

A documentação para o git-status não conta muito, exceto pelo fato de aceitar as mesmas opções que o git-commit (mas o objetivo do git-commit não é mostrar listas de arquivos alterados).

Kuba Suder
fonte

Respostas:

199

De dentro do diretório:

git status .

Você pode usar qualquer caminho realmente, use esta sintaxe:

git status <directoryPath>

Por exemplo, para diretório com o caminho "my / cool / path / here"

git status my/cool/path/here
Sam Doidge
fonte
3
Obrigado! Além disso, 'status git <diretório>' parece estar fazendo o que eu esperaria - honestamente, não me lembro de qual problema eu tinha antes ... talvez seja uma questão de uma versão diferente do git, não sei.
Kuba Suder
Sem problemas e possivelmente - as versões mais recentes do git parecem facilitar as coisas.
Sam Doidge
3
Sim, o comportamento definitivamente mudou de 1,6 para 1,7. Ele atende aos requisitos de OP em 1.7, mas 1.6 continua durante todo o repo.
colgur
31

O motivo que git statusleva as mesmas opções git commité que o objetivo git statusé mostrar o que aconteceria se você se comprometesse com as mesmas opções para as quais passou git status. A este respeito git statusé realmente git commit --preview.

Para obter o que deseja, você pode fazer o que mostra as alterações em etapas:

git diff --stat --cached -- <directory_of_interest>

e isso, que mostra alterações sem etapas:

git diff --stat -- <directory_of_interest>

ou isso que mostra os dois:

git diff --stat HEAD -- <directory_of_interest>
CB Bailey
fonte
2
Este parcialmente funciona, apesar de não mostrar arquivos recém-criados (untracked), como git-status faz ...
Kuba Suder
OK, eu não tinha certeza dos relatórios que você precisava. Se você precisar verificar arquivos não estágios, tente git ls-files --others <directory_in_question>ou ls-files -o.
CB Bailey
git ls-files -omostra arquivos em diretórios não estágios recursivamente, enquanto git statusmostra apenas o diretório de nível superior. E seria necessário compor git diff, git ls-filesproduzir e recriar todo o código de cores, etc., que git statusfornece se for para substituir git status. Eu também gostaria muito de ver uma solução para isso!
Peter V. Mørch
14

Solução mais simples:

  1. Vá para o diretório
  2. git status | grep -v '\.\.\/'

Claro que isso descarta cores.

Can Berk Güder
fonte
Se necessário, você pode adicionar algumas modificações para deixar a cor voltar. exemplo 1 exemplo 2
Carson
2

Como uma observação, se você simplificar a verificação de estatísticas do git sem acessar o diretório git;

### criar arquivo
sudo nano / usr / local / bin / gitstat

### coloque isso em

#! / usr / bin / env bash

dir = $ 1

if [[$ dir == ""]]; então
    eco "Diretório é necessário!"
    Saída
fi

echo "Git stat para '$ dir'."

git --git-dir = $ dir / .git - árvore de trabalho = $ dir diff --stat

### dar exec perm
sudo chmod + x / usr / local / bin / gitstat

E chamando esse script simples: gitstat /path/to/foo-project. Você também pode usá-lo enquanto está foo-projectfazendo gitstat .e, portanto, suponha que seja menor que git status -s, git diff --statou git diff --stat HEADse você estiver sempre usando console, em vez de GUI.

Créditos:

K-Gun
fonte