Bir farkım olduğunda, iyi görünmesi için nasıl renklendirebilirim? Komut satırı için istiyorum, bu yüzden lütfen hiçbir GUI çözümleri.
Bir farkım olduğunda, iyi görünmesi için nasıl renklendirebilirim? Komut satırı için istiyorum, bu yüzden lütfen hiçbir GUI çözümleri.
Yanıtlar:
Man sayfaları, diff
kendi içinden renklendirme için bir çözüm önermez. Lütfen kullanmayı düşünün colordiff
. Farkı diff
aynı çıktıyı üreten bir sarıcıdır, ancak okunabilirliği artırmak için çıktıyı renkli sözdizimi vurgulama kullanarak artırır:
diff old new | colordiff
ya da sadece:
colordiff old new
Kurulum:
sudo apt-get install colordiff
brew install colordiff
veyaport install colordiff
less -R
Renkler için kaçış dizilerini doğru bir şekilde görüntüleyen kullanılarak daha az boruya bağlanabilir .
-y
etkinleştirme seçeneği) ☹ Aşağıdaki vimdiff
öneri muhtemelen daha iyi bir yol
colordiff
için iyi çalışır svn diff | colordiff
(yani sadece diff sahip durumlarda, iki dosya diffed verilmemesi gibi).
-y
) destek içeriyor .
Vim kullanın :
diff /path/to/a /path/to/b | vim -R -
Ya da daha iyisi, VimDiff (ya da yazmasıvim -d
daha kısa olan) iki, üç ya da dört dosya arasında yan yana farklılıklar gösterecektir.
vim -d /path/to/[ab]
vimdiff file1 file2 file3 file4
ctrl-c
ve Vim'de ctrl-x
başka kullanımları var. ctrl-q
birçok terminal tarafından ele geçirilir. İhtiyaçlarınıza en uygun yolu bulmak için Yazma ve bırakma konusuna bakın .
zsh
? Yapıyı tanımıyorum =(...)
. İkincisi, diff -ur a b
aklımdaydı.
=(...)
Aslında başka bir seçenek var gibi görünüyor (ki ben sadece son zamanlarda, yukarıda açıklanan sorunla karşılaştığımda fark):
git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>
Git'iniz varsa (zaten zaten kullanıyor olabilirsiniz), dosyaların kendileri sürüm kontrolü altında olmasa bile karşılaştırma için kullanabilirsiniz. Varsayılan olarak sizin için etkinleştirilmemişse, burada renk desteğini etkinleştirmek, daha önce belirtilen geçici çözümlerden çok daha kolay görünüyor.
git diff <(xxd file1) <(xxd filed)
işe yaramaz.
git help diff
. Eğer git farkınız boş çıkıyorsa cd
, bulunduğunuz yeri deneyin .
git config color.diff auto
git diff --no-index
iki dosyayı karşılaştırmak için kullanın .
diff --color
seçeneği GNU diffutils 3.4'e eklendi (2016-08-08)
Bu varsayılan diff
çoğu dağıtımda uygulamadır ve yakında kullanıma sunulacaktır.
Ubuntu 18.04 diffutils
3.6 ve bu nedenle var.
3.5'de şöyle görünür:
Test:
diff --color -u \
<(seq 6 | sed 's/$/ a/') \
<(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')
Görünüşe göre c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (Mar 2015) 'de eklendi.
Kelime seviyesi farkı
Gibi diff-highlight
. Görünüşe göre mümkün değil, özellik isteği: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html
İlgili konular:
ydiff
olsa da, aşağıya bakın.
ydiff
yan yana kelime seviyesi farkı
https://github.com/ymattw/ydiff
Bu Nirvana mı?
python3 -m pip install --user ydiff
diff -u a b | ydiff -s
Sonuç:
Çizgiler çok darsa (varsayılan 80 sütun), ekrana aşağıdakilerle sığdır:
diff -u a b | ydiff -w 0 -s
Test dosyalarının içeriği:
bir
1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20
b
1
2
3
4
5 the original line teh original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the origlnal line
16
17
18
19
20
ydiff
Git entegrasyonu
ydiff
herhangi bir yapılandırma gerekmeden Git ile bütünleşir.
Git deposunun içinden git diff
, sadece şunları yapabilirsiniz:
ydiff -s
yerine git log
:
ydiff -ls
Ayrıca bkz: "git diff" i yaptığımda yan yana fark nasıl edinebilirim?
Ubuntu 16.04, git 2.18.0, ydiff 1.1 üzerinde test edilmiştir.
There is no word-highlighting, yet
- herhangi bir güncelleme? Bu soruya geldiğim şey bu (I grep --color
like-like diff output).
git diff --color
çalışıyor. SSH üzerinde çalışırken kullanışlıdır.
diff --color=always | less -R
Ve hemen kontrolünüzün ötesinde bazı çılgın kısıtlamalar nedeniyle a yum install colordiff
veya apt-get install colordiff
an'ın bir seçenek olmadığı veya sadece çılgın hissettiğiniz durumlarda, tekerleği bir dizi sed ile yeniden icat edebilirsiniz:
sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'
Bir kabuk betiği ve boru birleştirilmiş dif çıkışını içinden atın .
Yığın işaretleyicileri mavi yapar ve sırasıyla yeşil ve kırmızı arka planda yeni / eski dosya adlarını ve eklenen / kaldırılan çizgileri vurgular. 1 Ve sondaki alanı 2 değişiklikleri kolordifin yapabileceğinden daha belirgin hale getirecektir.
1 Bu arada, dosya adlarını değiştirilen satırlarla aynı şekilde vurgulamanın nedeni, dosya adları ile değiştirilen satırlar arasında doğru bir şekilde ayrım yapılmasının, bir regex ile uğraşacak bir şey olmayan fark biçimini düzgün şekilde ayrıştırmayı gerektirmesidir. Bunları vurgulamak görsel olarak "yeterince iyi" çalışır ve sorunu önemsiz kılar. Bununla birlikte, bazı ilginç incelikler var .
2 Ancak sondaki sekmeler değil. Görünüşe göre sekmeler en azından xterm'de arka plan ayarını alamıyor. Bu sekme vs boşluk değişiklikleri biraz göze çarpıyor yapar.
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(daha iyi bir yol olmasını bekliyorum).
Colordiff kullanmak için subversion yapılandırmasını değiştirebilirsiniz
~ / .Subversion / config.diff
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff
Renkli, kelime düzeyinde diff
çıkış
Aşağıdaki komut dosyası ve diff-vurgulama ile yapabilecekleriniz :
#!/bin/sh -eu
# Use diff-highlight to show word-level differences
diff -U3 --minimal "$@" |
sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
diff-highlight
(Kredi @ retracile cevabı için sed
vurgulama)
Ben grc
de dahil olmak üzere bir dizi komutun çıktı renklendirmek için izin verir (Generic Colouriser), kullanın diff
.
Herhangi bir komutun etrafına sarılabilen bir python betiğidir. Bunun yerine başvurmalarında diff file1 file2
, sen çağırmak istiyorum grc diff file1 file2
renklendirilmiş çıkış görmek. Ben Aliased gelmiş diff
etmek grc diff
daha kolay hale getirmek için.
fork()
WSL ile çalışmasına rağmen , aramalar nedeniyle mingw / cygwin yüklü Windows'ta çalışmaz.
İşte çağırdığı başka çözüm sed
renkleri göstermek için uygun ANSI çıkış sırasını eklemek için +
, -
ve @
sırasıyla kırmızı, yeşil ve mavi çizgiler.
diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"
Bu sorunun diğer çözümlerinden farklı olarak, bu çözüm ANSI kaçış dizilerini açıkça belirtmez. Bunun yerine, sırasıyla uygun bir renk ayarlamak ve terminal özniteliklerini sıfırlamak için ANSI kaçış dizilerini oluşturmak üzere tput setaf
ve tput sgr0
komutlarını çağırır .
Her bağımsız değişken için kullanılabilir renkleri görmek için tput setaf
şu komutu kullanın:
for i in {0..255}; do tput setaf $i; printf %4d $i; done; tput sgr0; echo
Çıktı şöyle görünür:
İşte tput setaf
ve tput sgr0
komutlarının uygun ANSI kaçış dizilerini oluşturduğuna dair kanıtlar :
$ tput setaf 1 | xxd -g1
00000000: 1b 5b 33 31 6d .[31m
$ tput setaf 2 | xxd -g1
00000000: 1b 5b 33 32 6d .[32m
$ tput setaf 6 | xxd -g1
00000000: 1b 5b 33 36 6d .[36m
$ tput sgr0 | xxd -g1
00000000: 1b 28 42 1b 5b 6d .(B.[m
Yana wdiff
başında ve hem eklemeler ve silmeler sonunda dize belirterek args kabul eder o dizeleri olarak ANSI renk dizilerini kullanabilirsiniz:
wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2
Örneğin, bu iki CSV dosyasını karşılaştırma çıktısıdır:
Https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html sayfasından örnek
colordiff
Şimdi (1.0.16) anlar wdiff
, bu nedenle Ayrıca sadece boruyu: wdiff -n f1 f2 | colordiff
. wdiff
diffutils ile birleştirilmelidir ...
Diff-so-fancy'yi denemenizi öneririm . Çalışmam sırasında kullanıyorum ve şu andan itibaren harika görünüyor. Birçok seçenekle birlikte gelir ve farklarınızı istediğiniz şekilde yapılandırmak gerçekten kolaydır.
Yükleyebilirsiniz:
sudo npm install -g diff-so-fancy
veya Mac'te:
brew install diff-so-fancy
Daha sonra farklarınızı şöyle vurgulayabilirsiniz:
diff -u file1 file2 | diff-so-fancy
İle yarasa komutu:
diff file1 file2 | bat -l diff
Ubuntu'daki git'in son sürümlerinde, fark vurgulamayı aşağıdakilerle etkinleştirebilirsiniz:
sudo ln -s /usr/share/doc/git/contrib/diff-highlight/diff-highlight /usr/local/bin
sudo chmod a+x /usr/share/doc/git/contrib/diff-highlight/diff-highlight
Ve sonra bunu sizin için ekleyin .gitconfig
:
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
Senaryo başka dağıtımlarda başka bir yerde bulunuyor olabilir, locate diff-highlight
nerede bulmak için kullanabilirsiniz .