Eu gosto da formatação de saída git diff
. A cor e a +
/ -
representação das alterações entre as linhas são mais fáceis de ler do que o GNU diff.
Eu posso executar git diff
usando --no-index
flag fora de um repositório git e funciona bem. No entanto, parece estar faltando a --exclude
opção para excluir arquivos ou subdiretórios de uma recursiva diff
.
Existe uma maneira de obter o melhor dos dois mundos? (opções de cores e +
/ -
formato git diff
e --exclude
opção de GNU diff).
Eu experimentei colordiff
, mas ainda prefiro o formato de saídagit diff
newtext
no/etc/colordiff
. Eu acho que o git usa verde?Respostas:
Eu não sei como fazer cores, mas isso fará o
+/-
melhor que<
e>
.fonte
diff -u file1 file2 | tig
.colordiff
partir do seu repositório apt / yum / pacman e use-o.colordiff
: docs.aws.amazon.com/AWSEC2/latest/UserGuide/...colordiff
, você também pode obter coresvim
definindocdiff() { diff -u $@ | vim -R -; }
.Você também pode usar
git diff --no-index -- A B
(via página de manual ).fonte
A
eB
diferem em comparação um com o outro, em vez de onde cada arquivo foi modificado em relação à sua última revisão respectiva.git diff --no-index
é ótimo, mas como o OP apontou, ele não possui a--exclude
bandeira, portanto é frequentemente de utilidade muito limitada.Instale o colordiff .
Atualize seu ~ / .colordiffrc (copiando / etc / colordiffrc primeiro, se necessário):
Use
colordiff -u file1 file2
para dois arquivos oucolordiff -ruN path1 path2
para comparar recursivamente caminhos.Não é exatamente o mesmo, mas é muito próximo.
fonte
Isto é o que eu sugiro e é bem próximo
colordiff
: Você terá que instalar estebrew install colordiff
no meu Mac.port install colordiff
em alguns Macs.sudo apt-get install colordiff
no Debian ou Ubuntu-R
: indica menos para mostrar cores em vez dos códigos brutos.Eu finalmente usei
-w
porque não queria ver diferenças de espaço em branco.Edit: Como sugerido por @Ciprian Tomoiaga no comentário, você pode tornar isso uma função e colocá-lo em seu
~/.bashrc
arquivo também.fonte
function gdiff () { diff -u $@ | colordiff | less -R; }
O GNU
diff
tem uma--color
opção desde a versão 3.4 no final de 2016, de acordo com esta resposta no Unix SE. Isso ao lado-u
deve ser suficiente para imitar a saída degit diff
:diff -u --color=always file1 file2 | less -r
--color
deve seralways
quando usado em um tubo,auto
irá desligar a cor nos tubos.Eu só tentei isso com o Git Bash no Windows, onde
less -R
apenas coloriria a primeira linha de um pedaço.less -r
consertou para mim nesse caso.fonte
Usando apenas
bash
,diff
,tput
, eless
, podemos aproximar de perto a saídagit diff
. Haverá algumas diferenças notáveis, porém, devido à miopia dosdiff
programadores.Coloque a seguinte definição de função Bash em algum arquivo obtido automaticamente pela sua conta de usuário e você poderá acessar a função na linha de comando:
Esta função funciona da seguinte maneira:
diff
é chamado com várias opções de formatação para especificar como as alterações nos arquivos serão exibidas.tput
é usado para inserir códigos de cores ANSI nessas opções de formatação. Observe que, ao usar terminais não-ANSI, talvez seja necessário substituí-lotput setaf
portput setf
.diff
é canalizada paraless
.-R
permite que as cores ANSI sejam preservadas.-X
impedeless
de limpar a tela ao sair.-F
impede aless
operação como pager se a saída couber em uma tela.@full
, a função exibirá todas as linhas inalteradas, além das linhas adicionadas e removidas.Observe as seguintes diferenças entre essa abordagem e
git diff
:git diff
relata três linhas de contexto em torno de cada alteração. Infelizmente,diff
parece reclamar e sair se você quiser especificar o número de linhas de contexto e ao mesmo tempo especificar opções de formatação. (Pelo menos no Mac OS X Yosemite). Obrigadodiff
programadores. Portanto, você pode solicitar nenhuma linha de contexto ao redor de cada alteração, que é o comportamento padrão, ou pode solicitar que todas as linhas inalteradas no arquivo também sejam relatadas, especificando@full
como o primeiro parâmetro.git diff
, os números de linhas relatados por esta função também variam dos informados porgit diff
.git diff
lida melhor com isso, através de suas linhas de contexto. Você pode tentar passar opções diferentesdiff
para lidar melhor com espaços em branco, se preferir.fonte
Você está procurando
colordiff
:fonte
Coloque isso em seu
.bashrc
ou.zshrc
:diff() { git diff --no-index "$1" "$2" | colordiff; }
requirments:
git
ecolordiff
deve ser instalado com antecedência.uso:
diff file1 file2
exemplo: por $
diff .tmux.conf .zshrc.pre-oh-my-zsh
fonte
A outra opção é fazer isso de fora do repositório para que o git saiba diferenciar os arquivos. por exemplo. uma função shell algo como:
fonte
Use colordiff :
Instalação:
Uso:
Dá exatamente a mesma diferença mostrada por
git diff
.fonte
Se você não tiver
colordiff
ougit diff
, poderá obter coresvim
.ou simplesmente
fonte
Como o morcego tem uma coloração agradável, testei se isso também funciona
diff
e surpreendentemente funcionou muito bem fora da caixa.$ diff file1 file2 | bat
ou$ diff -u file1 file2 | bat
Então, suponho que você possa fazer uma função como esta abaixo para ser mais eficiente:
fonte
Testado no debian 9
diff -u --color=always file1 file2
fonte
Eu acho que a configuração:
combinado com a
--relative=<path>
opção do comando "diff" faria o que você queria. Você tentou ?fonte
git
. Ele estava pedindo para asdiff
opções do programa