Eu tenho meu editor de texto para aparar automaticamente os espaços em branco finais ao salvar um arquivo e estou contribuindo para um projeto de código aberto que tem sérios problemas com os espaços em branco finais.
Sempre que tento enviar um patch, devo primeiro ignorar todas as alterações somente de espaço em branco manualmente, para escolher apenas as informações relevantes. Não apenas isso, mas quando corro git rebase
, geralmente encontro vários problemas por causa deles.
Como tal, eu gostaria de poder adicionar ao índice apenas alterações que não sejam espaços em branco, de uma maneira semelhante a git add -p
isso, mas sem ter que escolher todas as alterações sozinho.
Alguém sabe como fazer isso?
Edição: Eu não posso mudar a maneira como o projeto funciona, e eles decidiram, depois de discuti-lo na lista de discussão, ignorar isso.
fonte
git apply --ignore-whitespace
caso contrário, o patch não se aplicaria por razões óbvias.git add -w
fez isso.patch does not apply
eerror while searching for
... Alguma idéia?patch does not apply
erro.git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero
. Isso não é arriscado, porque o índice já está o mais atualizado possível, por isso é uma base confiável para o patch.Isso funciona para mim:
Se você quiser manter um estoque, isso funciona
Eu não gosto do esconderijos, mas eu já correr em um bug no git + cygwin onde eu perder as alterações, de modo a certificar-se de que o material foi para a reflog pelo menos eu configurar o seguinte:
Basicamente, criamos um diff que não inclui as alterações de espaço, revertemos todas as alterações e depois aplicamos o diff.
fonte
git stash
check-out em vez de fazer um backup das suas alterações, pelo menos até que sejam testadas.Crie um arquivo de correção contendo apenas as alterações reais (excluindo linhas com apenas alterações de espaço em branco), limpe sua área de trabalho e aplique esse arquivo de correção:
Avaliar as diferenças remanescentes, em seguida,
add
ecommit
como normal.O equivalente ao Mercurial é fazer o seguinte:
fonte
A resposta mais votada não funciona em todos os casos, devido ao espaço em branco no contexto do patch, de acordo com os usuários nos comentários.
Revisei o comando da seguinte maneira:
Isso gera um patch sem contexto. Não deve ser um problema, pois o patch tem vida curta.
Alias correspondente, novamente uma revisão do que já foi fornecido por outros usuários:
fonte
--ignore-space-change
vez de-w
.git diff -U0 --ignore-space-change --no-color | git apply --cached --unidiff-zero
--ignore-blank-lines
contrário, você encontrará trechos de diferenças sendo corrigidos com deslocamentos incorretos se parte do 'espaço em branco' que você deseja ignorar for remoções / adições de linhas vazias.Adicione o seguinte ao seu
.gitconfig
:Obrigado à resposta de @Colin Herbert pela inspiração.
Explicação da sintaxe
A final
#
deve ser citada para que não seja tratada como um comentário dentro do.gitconfig
, mas é repassada e tratada como um comentário dentro do shell - ela é inserida entre o final dosgit apply
argumentos fornecidos pelo usuário e os que sãogit
colocados automaticamente no final da linha de comando. Esses argumentos não são desejados aqui - não queremosgit apply
consumi-los, portanto, o caractere de comentário anterior. Você pode querer executar este comandoGIT_TRACE=1 git anw
para ver isso em ação.O
--
sinal termina nos argumentos e permite que você tenha um arquivo nomeado-w
ou algo que se pareça com uma opção paragit diff
.Aspas duplas escapadas
$@
são necessárias para preservar todos os argumentos citados fornecidos pelo usuário. Se o"
personagem não for escapado, ele será consumido pelo.gitconfig
analisador e não alcançará o shell.Nota:
.gitconfig
apelido de análise não reconhece aspas simples como nada de especial - seus apenas caracteres especiais são"
,\
,\n
, e;
(fora de uma"
corda -quoted). É por isso que um"
sempre deve ser escapado, mesmo que pareça estar dentro de uma string de aspas simples (sobre a qual o git é completamente independente).Isso é importante, por exemplo. se você tiver um alias útil para executar um
bash
comando na raiz da árvore de trabalho. A formulação incorreta é:Enquanto o correto é:
fonte
Que tal o seguinte:
O comando dentro de aspas recebe os nomes dos arquivos que possuem alterações que não são de espaço em branco.
fonte
git add `git diff -w |grep '^+++' |cut -c7-`
se submódulos não utilizadoVocê deve primeiro considerar se o espaço em branco à direita é intencional. Muitos projetos, incluindo o kernel do Linux, Mozilla, Drupal e Kerberos (para citar alguns da página da Wikipedia em grande estilo) proíbem o espaço em branco à direita. Na documentação do kernel do Linux:
No seu caso, o problema é o contrário: confirmações anteriores (e talvez atuais) não seguiram essa diretriz.
Aposto que ninguém realmente quer o espaço em branco à direita, e corrigir o problema pode ser uma mudança bem-vinda. Outros usuários também podem estar enfrentando o mesmo problema que você. Também é provável que os colaboradores que estão adicionando espaço em branco à direita não tenham consciência de que estão fazendo isso.
Em vez de tentar reconfigurar o git para ignorar o problema ou desativar a funcionalidade desejável no seu editor, eu começaria com uma postagem na lista de discussão do projeto que explica o problema. Muitos editores (e o próprio git) podem ser configurados para lidar com o espaço em branco à direita.
fonte
Encontrei um gancho de pré-confirmação do git que remove os espaços em branco à direita . No entanto, se você não conseguir que outras pessoas usem isso, talvez não seja uma solução válida.
fonte