O comportamento padrão do git diff é abrir cada arquivo diff em série (aguarde o fechamento do arquivo anterior antes de abrir o próximo arquivo).
Estou procurando uma maneira de abrir todos os arquivos de uma só vez - no BeyondCompare, por exemplo, isso abriria todos os arquivos em guias na mesma janela do BC.
Isso facilitaria a revisão de um conjunto complexo de alterações; deslize para frente e para trás entre os arquivos diff e ignore os arquivos sem importância.
Respostas:
A partir da
git
v1.7.11, você pode usargit difftool --dir-diff
para executar uma comparação de diretório.Esse recurso funciona bem com o Meld 3.14.2, por exemplo, e permite navegar em todos os arquivos modificados:
Esta é uma função útil do Bash:
A resposta a seguir se aplica a
git
instalações anteriores à v1.7.11.Essa mesma pergunta foi feita na lista de e-mails do git .
Eu montei um script de shell com base nesse segmento de email que executa uma diferença de diretório entre confirmações arbitrárias.
A partir do git v1.7.10, o
git-diffall
script é incluído nacontrib
instalação padrão do git.Para versões anteriores à v1.7.10, você pode instalar a partir do
git-diffall
projeto no GitHub .Aqui está a descrição do projeto:
fonte
git difftool --dir-diff
e além do Compare): Entrei em contato com o Scooter Software (autores do Beyond Compare) e eles dizem quebcompare.exe
não é uma solução suportada e podem causar problemas se houver mais de um diff aberto por vez. Eles planejam adicionar suporte a diferenças de pastabcomp.exe
em uma versão futura (enquanto isso, continuarei usandobcompare.exe
como solução alternativa não suportada).--dir-diff
funciona perfeitamente com Meld. A partir daí, permitirá que você selecione e visualize as diferenças para arquivos individuais.Aqui está o que eu decidi ...
Copie o seguinte código em um arquivo chamado
git-diffall
(sem extensão):Coloque o arquivo na
cmd
pasta do seu diretório de instalação do git (por exemploC:\Program Files (x86)\Git\cmd
)E use como você faria
git diff
:Notas: A chave para isso é o & param, que informa ao comando diff externo para executar em uma tarefa em segundo plano, para que os arquivos sejam processados imediatamente. No caso do BeyondCompare, isso abre uma tela com cada arquivo em sua própria guia.
fonte
"$filename"
para"../$filename"
. Em seguida, funcionou perfeitamente com o Beyond Compare #git-diffall
arquivo àC:\Program Files\Git\cmd
pasta? Eu fiz exatamente como instruído, mas ao fazê$ git diffall git: 'diffall' is not a git command. See 'git --help'. Did you mean this? difftool
meld
possui um recurso interessante: se você fornecer um diretório sob controle de origem (Git, Mercurial, Subversion, Bazaar e provavelmente outros), ele listará automaticamente todos os arquivos alterados e você poderá clicar duas vezes para visualizar as diferenças individuais.Na IMO, é muito mais fácil digitar
meld .
e descobrir o VCS do que configurar o VCS para iniciarmeld
. Além disso, você pode usar o mesmo comando, independentemente do VCS que seu projeto estiver usando, o que é ótimo se você alternar muito entre eles.A única desvantagem é que é mais lento para o meld procurar alterações do que as alterações do git / hg / svn, embora seja lento o suficiente para ser um problema dependerá de como você o está usando, tenho certeza.
fonte
git diff
não oferece.Eu encontrei esse método (GitDiff.bat e GitDiff.rb) que copia os arquivos para diretórios temporários antigos / novos e, em seguida, compara uma pasta com eles.
Mas eu prefiro ver os arquivos de trabalho diretamente (a partir do diretório de trabalho), pois o BeyondCompare possui o recurso útil de poder editar o arquivo de dentro da janela do diff, o que é ótimo para limpezas rápidas.
Editar: um método semelhante aqui em resposta à minha pergunta na lista de discussão do git.
fonte
git meld
=> https://github.com/wmanley/git-meld é um script incrível que abrirá um diff limpo de todos os arquivos em uma única janela.fonte
Observe aqui que o Araxis Merge tem uma opção de comando '-nowait':
Talvez isso retorne um código de saída imediato e funcionaria, alguém experimentou isso? Não foi possível encontrar opção semelhante para o BeyondCompare ...
fonte
Difusa também possui integração VCS. Ele interopera com uma infinidade de outros VCS, incluindo SVN, Mercurial, Bazaar, ... Para o Git, ele até mostra três painéis se algumas, mas nem todas, mudanças forem realizadas. No caso de conflitos, haverá até quatro painéis.
Invoque-o com
na sua cópia de trabalho do Git.
Se você me perguntar, o melhor visual diferenciado que eu já vi há uma década. (E eu tentei misturar também.)
fonte
Se tudo o que você deseja fazer é abrir todos os arquivos modificados no momento, tente algo como:
Se você está fazendo confirmações de "conjuntos complexos de alterações", convém reconsiderar seu fluxo de trabalho. Um dos recursos realmente bons do git é que facilita ao desenvolvedor reduzir conjuntos de alterações complexos a uma série de patches simples. Em vez de tentar editar todos os arquivos que estão atualmente modificados, convém procurar
o que permitirá que você selecione seletivamente pedaços.fonte
Eu escrevi um script do PowerShell que duplicará duas árvores de trabalho e será comparado com o DiffMerge. Então você pode fazer:
Para comparar o ramo principal, três checkins atrás, com a árvore de trabalho atual, por exemplo.
É brilhante e novo e provavelmente cheio de insetos. Uma desvantagem é que os arquivos da sua árvore de trabalho que ainda não foram adicionados ainda são copiados para as duas árvores de trabalho. Também pode ser lento.
http://github.com/fschwiet/GitNdiff
fonte
Para aqueles interessados em usar o git-diffall no Mac OS X com Araxis, bifurquei o projeto git-diffall no github e adicionei um AppleScript que envolve o comando Araxis Merge. Nota: este é um clone ligeiramente modificado do
araxisgitdiff
arquivo que acompanha o Araxis Merge for Mac OS X.https://github.com/sorens/git-diffall
fonte
O seguinte funciona com meld e kdiff3
Abre todos os arquivos em uma janela que você pode navegar com facilidade. Pode ser usado com conjuntos de alterações no lugar de origem / nome da filial
por exemplo:
git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1
fonte
Você pode usar o gitk e ver todas as diferenças ao mesmo tempo
fonte