Estou tentando excluir um arquivo ( db/irrelevant.php
) de um diff do Git. Tentei colocar um arquivo no db
subdiretório chamado .gitattributes
com a linha irrelevant.php -diff
e também tentei criar um arquivo chamado .git/info/attributes
contendo db/irrelevant.php
.
Em todos os casos, o db/irrelevant.php
arquivo é incluído no diff como um patch binário do Git. O que eu quero é que as alterações nesse arquivo sejam ignoradas pelo comando diff. O que estou fazendo de errado?
.gitignore
sintaxe do arquivo. Por exemplo, em:!*shrinkwrap.yaml
vez de:!shrinkwrap.yaml
.git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
(aspas duplas em vez de aspas simples)git diff -- . :(exclude)db/irrelevant.php
Você pode configurar um driver diff personalizado com um comando no op e atribuí-lo aos arquivos que devem ser ignorados.
Crie um driver diff específico do repositório com este comando
ou para todos os seus compromissos com
--global
.(Se
/bin/true
não existir no MacOS, as alternativas seriam usar/usr/bin/true
orecho
).Em seguida, atribua o novo driver diff aos arquivos que você deseja que sejam ignorados no
.git/info/attributes
arquivo.Se este estado é suposto ser compartilhada com outros desenvolvedores que você poderia usar
.gitattributes
em vez de.git/info/attributes
e partilhar ogit config
comando com seus pares (através de um arquivo de documentação ou algo assim).fonte
[diff "nodiff"]
`command = / bin / true` e depois criei um arquivo chamado .git / info / attribute nos quais adicionei:irrelevant.php diff=nodiff
git diff --stat
. Nesse caso, pode-se usargit diff ... | diffstat
como solução alternativa.--no-ext-diff
Você também pode usar filterdiff programa do patchutils coleção programa para excluir algumas partes de um diff. Por exemplo:
fonte
-p
, na página de manual (1), é "-pn, --strip-match = n Ao fazer a correspondência, ignore os primeiros n componentes do nome do caminho". Levei um tempo para capturar que-p 1
estava removendo adb
parte do caminho do OP. Se você deseja apenas especificar um nome de arquivo e ignorar todas as possibilidades de caminho / diretório, pode usar-p 99
.Este método é mais curto que as respostas aceitas.
Para mais informações sobre as diferentes possibilidades de inclusão / exclusão, leia este outro post.
fonte
Esta solução de uma linha não requer outros utilitários / downloads:
Onde
file/to/exclude.txt
está o nome do arquivo que você deseja excluir, é claro.Edit: credit ksenzee por corrigir arquivos excluídos quebrando o diff.
fonte
git diff --stat master
sem muito sucesso - você poderia ajudar?Resposta realmente boa do KurzedMetal para o que eu precisava fazer, que era a capacidade de ver que o arquivo foi alterado, mas não de gerar o diff, que poderia ter sido enorme, no meu caso.
Mas um colega meu sugeriu uma abordagem que era ainda mais simples e funcionou para mim:
adicionando
.gitattributes
arquivo no diretório em que o arquivo a ser ignoradogit diff
reside com o seguinte conteúdo:file-not-to-diff.bin -diff
Isso ainda permite
git status
"ver" se o arquivo foi alterado.git diff
também "verá" que o arquivo foi alterado, mas não gerará o arquivodiff
.Essa
.bin
extensão para o arquivo no exemplo foi deliberada. Percebo que esse é o comportamento padrão do git para arquivos binários e não requer tratamento especial com.gitattributes
. Mas, no meu caso, esses arquivos foram reconhecidos como arquivos de texto pelo utilitário git e "file", e isso fez o truque.fonte
Resposta mais simples
git diff ':!db/irrelevant.php'
É logo
':!<path to file>'
após o seu comando diff. O comando diff pode ser tão complicado quanto você quiser, e você pode usar curingas como*.min.js
ou adicionar várias exclusões (o espaço separa os blocos entre aspas), se desejar.fonte
Relativo ao diretório raiz do git
git diff
aceita uma exclusão opcionalVocê pode adicionar alguns curingas
Segmente tipos de arquivo específicos
Ou largue um pequeno script para seus dotfiles
Tais como
.bash_profile
ou.zshrc
fonte
git diff --staged
Espero que isso ajude você.É muito simples, você pode excluir o que deseja usando comandos unix padrão; esses comandos estão disponíveis no git bash, mesmo no ambiente Windows. O exemplo abaixo mostra como excluir o diff para arquivos pom.xml, primeiro verifique o diff para mestre apenas para nomes de arquivos e, em seguida, use 'grep -v' exclua arquivos que você não deseja e depois execute novamente o diff para dominar com lista pré-preparada:
fonte
semelhante à solução de Ben Roux , mas compartilhando de qualquer maneira:
ou, se as alterações já tiverem sido confirmadas localmente:
Exemplos:
fonte
Eu faço o seguinte:
Sei que não é uma solução elegante e, às vezes, não pode ser usada (por exemplo, se você já possui coisas organizadas), mas faz o truque sem precisar digitar um comando complicado
fonte
Se você quiser fazer isso apenas para inspecionar visualmente o diff, uma ferramenta visual diff (como Meld ) permitirá que você faça isso com um pequeno comando que é fácil de lembrar.
Primeiro, configure uma ferramenta diff, se você ainda não o fez.
Em seguida, você pode executar uma comparação de diretório.
Você poderá navegar pelas diferenças (por arquivo) no Meld (ou sua ferramenta preferida). Simplesmente não abra o arquivo que deseja ignorar.
fonte