Como eu 'git diff' em um determinado diretório?

132

git diffrealmente executa um diff em todo o código fonte. Como faço isso em um determinado diretório, para que eu possa visualizar as modificações nos arquivos abaixo dele?

priya
fonte
2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

Respostas:

125

Forneça um caminho (myfolder neste caso) e apenas execute:

git diff myfolder/
Geo
fonte
28
Eu gostaria de usar git diff -- myfolderpara minimizar a ambiguidade do git. A notação geral para git diff (e muitos comandos git) é git diff [commit-ish] -- [path]onde commit-ish assume como padrão HEAD (onde você está agora) e [path]assume como padrão o diretório raiz do git, mas pode ser qualquer coisa relativa ao diretório atual. Sem o --, o git vai adivinhar o que você quer dizer, [commit-ish]ou [path]. Em alguns casos, isso faz com que o git diga que a notação é 'ambígua'. Se eu me lembro bem.
L0LN1NJ4
2
Isso não imprime nada quando tento o método na resposta e o método no comentário.
ray
@ray que significa que você não têm nenhuma diferença entre a árvore trabalhando e mais recente comprometer
Valerij vasilcenko
3
Para o @ray e futuros indivíduos que estão vendo isso, é possível incluir os ramos que você está tentando diferenciar, git diff master..develop myfolder/como o @CrandellWS disse no comentário sobre a pergunta original. O status Git mostrará as alterações, se é isso que você está procurando.
BVBAccelerate
2
@ray verifique se você está no diretório raiz. O caminho será relativo ao seu diretório atual.
Nickofthyme 19/10/2018
59

Se você estiver comparando ramificações diferentes, precisará --separar uma revisão do Git de um caminho do sistema de arquivos. Por exemplo, com duas ramificações locais mastere bryan-working:

$ git diff master -- AFolderOfCode/ bryan-working -- AFolderOfCode/

Ou de uma filial local para um controle remoto:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/
bcattle
fonte
29
Somente uma cláusula é necessária depois de listar os dois ramos, como em: git diff branch1 branch2 - caminho / para / dir
emery
4

Você deve criar o hábito de examinar a documentação para coisas assim. É muito útil e irá melhorar suas habilidades muito rapidamente. Aqui está a parte relevante quando você fazgit help diff

   git diff [options] [--no-index] [--] <path> <path>

Os dois <path>s são o que você precisa alterar para os diretórios em questão.

Noufal Ibrahim
fonte
3

Adicione Beyond Compare como seu difftool no Git e adicione um alias para diffdir como:

git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"

Obtenha o gitdiff como:

git diffdir 4bc7ba80edf6  7f566710c7

Referência: Compare diretórios inteiros com git difftool + Além da comparação

Barani
fonte
1
O sinal de igual parece estar errado para o git 2.17.1. Utilize git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"vez
Mark Schäfer
Observe que, ao usar o Beyond Compare para dir diff, você deve configurá-lo para seguir os links simbólicos (Em uma exibição de comparação de pastas -> Regras (ícone do árbitro) -> Tratamento -> siga os links simbólicos) OU, adicione a --no-symlinksopção para que o comando leiagit difftool --dir-diff --no-symlinks
Ashutosh Jindal
1

Não apenas você pode adicionar um caminho, mas também pode adicionar git diff --relativepara obter um resultado relativo a essa pasta.

git -C a/folder diff --relative

E com o Git 2.28 (terceiro trimestre de 2020), os comandos da difffamília " " aprenderam a honrar a " diff.relative" variável de configuração.

Veja commit c28ded8 (22 de maio de 2020) por Laurent Arnoud ( spk) .
(Mesclado por Junio ​​C Hamano - gitster- no commit e34df9a , 02 jun 2020)

diff: adicionar opção de configuração relative

Assinada por: Laurent Arnoud
Acked-by: Đoàn Trần Công Danh

A diff.relativeopção booleana configurada para truemostra apenas alterações no diretório / valor atual especificado pelo pathargumento da relativeopção e mostra os nomes de caminho relativos ao diretório mencionado acima.

Ensine --no-relativea substituir anteriormente--relative

Adicione a documentação das opções git-format-patch (1) --relativee--no-relative

A documentação agora inclui :

diff.relative:

Se definido como ' true', ' git diff' não mostra alterações fora do diretório e mostra nomes de caminho em relação ao diretório atual.

VonC
fonte
0

Se você deseja excluir os subdiretórios, pode usar

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)
Salvian Reynaldi
fonte
0

Para usar o Beyond Compare como o difftool para o diretório diff, lembre-se de ativar os links simbólicos da seguinte maneira:

Em uma pasta Compare ViewRules (Ícone do árbitro):

Digite a descrição da imagem aqui

E, em seguida, ative os links simbólicos e atualize os padrões da sessão:

Digite a descrição da imagem aqui


OU,

configure o alias da seguinte maneira:

git config --global alias.diffdir "difftool --dir-diff --tool=bc3 --no-prompt --no-symlinks"

Observe que, em ambos os casos, todas as edições feitas no lado (esquerda ou direita) que se referem à árvore de trabalho atual são preservadas.

Ashutosh Jindal
fonte