Eu estou querendo saber como posso excluir um diretório inteiro do meu diff Git. (Neste caso / especificação). Estou criando um diff para toda a versão do software usando o comando git diff. No entanto, as alterações nas especificações são irrelevantes para este procedimento e apenas criam dores de cabeça. agora eu sei que posso fazer
git diff previous_release..current_release app/
Isso criaria um diff para todas as alterações no diretório do aplicativo, mas não por exemplo, no diretório lib /. Alguém sabe como realizar esta tarefa? Obrigado!
Edit: Eu só quero ser claro, eu sei que posso apenas definir os parâmetros de todos os meus diretórios no final, menos / spec. Eu esperava que houvesse uma maneira de realmente excluir um único diretório no comando.
Respostas:
Supondo que você use o bash e tenha ativado o globbing estendido (
shopt -s extglob
), você pode lidar com isso do lado do shell:Economiza a necessidade de listar todas as outras coisas.
Ou, independente do shell:
Você pode agrupar isso em um script shell de uma linha para evitar ter que redigitar os argumentos.
fonte
.!(.|)
tudo o que começa com um.
sinal de adição.
e..
.--
que acabei de adicionar deve corrigir isso.--name-only
no final também.-- path/of/new/file
e ele vai descobrir isso :)Baseado em nesta resposta, você também pode usar:
Este é um recurso git recente que permite excluir certos caminhos. Deve ser mais confiável do que vários oneliners de casca.
Estou postando isso aqui, porque esta pergunta ainda é o hit nº 1 de "caminho de exclusão do diff do git".
fonte
git diff previous_release current_release --name-status -- . ':!spec'
current_release
eprevious_release
me fez sorrir quando descobri.git diff --stat dev -- . ':!/Mopy/Docs/*'
. O que não funciona para mimgit diff dev --stat -- . ':!('Mopy/Docs/Wrye Bash General Readme.html'|'Mopy/Docs/Wrye Bash Advanced Readme.html')'
e variaçõesgit diff --check -- . ':!config/database.yml'
git diff previous_release current_release -- . ':!file_a' ':!file_b'
Se você deseja especificar mais de um caminho a ser excluído em um diff do git, basta adicionar parâmetros de exclusão adicionais ao final, por exemplo, para excluir tudo nos diretórios de fornecedores e bin das estatísticas: -
fonte
Você pode tentar desarmar o atributo diff para qualquer arquivo no diretório lib.
.gitattributes
:O racl101 acrescenta nos comentários :
fonte
.gitattributes
arquivo em uma ramificação especial feita apenas para este tipo de 'release' diff;) Rebase dessa ramificação especial em cimacurrent_release
e fazer sua diff a partir daí._site/* -diff
Agora, o diff do Git aceita um formato de exclusão personalizado:
git diff -- ':(exclude)lib/*'
Tenha cuidado se você tiver muitos nomes de pastas repetitivos ('/ app', '/ lib' etc.), pois isso excluirá arquivos relativos ao diretório de trabalho atual E ao diretório raiz do git.
fonte
git diff -- . ':(exclude)lib/*'
?git diff
para tudo relativo ao seu caminho atual, em vez de exigirgit diff -- .
git diff -- ":(exclude)lib/*"
Relativo ao diretório raiz do git
git diff
aceita uma exclusão opcionalVocê pode adicionar alguns curingas
Segmente tipos de arquivo específicos
Algum açúcar sintático aplicado
Ou solte um pequeno script para seus dotfiles
Tais como
.bash_profile
ou.zshrc
fonte
fonte