Git'te, aynı dosyayı aynı daldaki iki bitişik (bitişik olmayan) arasında nasıl karşılaştırabilirim (örneğin master)?
Visual SourceSafe (VSS) veya Team Foundation Server (TFS) gibi bir karşılaştırma özelliği arıyorum .
Git'te mümkün mü?
Git'te, aynı dosyayı aynı daldaki iki bitişik (bitişik olmayan) arasında nasıl karşılaştırabilirim (örneğin master)?
Visual SourceSafe (VSS) veya Team Foundation Server (TFS) gibi bir karşılaştırma özelliği arıyorum .
Git'te mümkün mü?
Yanıtlar:
Gönderen git-diff
man:
git diff [--options] <commit> <commit> [--] [<path>...]
Örneğin, "main.c" dosyası ile şimdi ve iki işlem arasındaki farkı görmek için, üç eşdeğer komut aşağıda verilmiştir:
$ git diff HEAD^^ HEAD main.c
$ git diff HEAD^^..HEAD -- main.c
$ git diff HEAD~2 HEAD -- main.c
--
, örneğin adlı bir dosyanız olduğunda kullanışlıdır -p
. Senaryolarda kullanımı iyidir, sadece pratikte gerekli nadir durumlarda.
İki farklı dosyayı iki farklı revizyonda da karşılaştırabilirsiniz, örneğin:
git diff <revision_1>:<file_1> <revision_2>:<file_2>
<file_1>
ve <file_2>
değil üst düzey git yönetilen dizin, geçerli dizinde bulunan bir sona ekleme zorundadır ./
Unix tarih:<revision_1>:./filename_1
"Difftool" u yapılandırdıysanız,
git difftool revision_1:file_1 revision_2:file_2
Örnek: Bir dosyayı son taahhüdünden aynı şubedeki önceki taahhüdüyle karşılaştırma: Proje kök klasörünüzdeyseniz
$git difftool HEAD:src/main/java/com.xyz.test/MyApp.java HEAD^:src/main/java/com.xyz.test/MyApp.java
~ / .Gitconfig veya project / .git / config dosyanızda aşağıdaki girişlerin olması gerekir. P4merge yükleyin [Bu benim tercih edilen fark ve birleştirme aracıdır]
[merge]
tool = p4merge
keepBackup = false
[diff]
tool = p4merge
keepBackup = false
[difftool "p4merge"]
path = C:/Program Files (x86)/Perforce/p4merge.exe
[mergetool]
keepBackup = false
[difftool]
keepBackup = false
[mergetool "p4merge"]
path = C:/Program Files (x86)/Perforce/p4merge.exe
cmd = p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
İki farklı işlemin SHA-1 kimliğini kontrol edin $ git log
, kopyalayın ve komutu bu kimliklerle çalıştırın . Örneğin:git diff
$ git diff (sha-id-one) (sha-id-two)
git diff (sha-id-one) (sha-id-two) -- filename.ext
dosya adı olmadan bu iki işlemdeki tüm dosyaların farklarını listeler .
İki taahhüt arasındaki dosyada yapılan değişiklikleri taahhüt etme temelinde görmek istiyorsanız, ayrıca şunları yapabilirsiniz:
git log -u $start_commit..$end_commit -- path/to/file
Burada, Git günlük komutunda bulunan belirli bir dosya için Git diff komutlarını yazdıran bir Perl betiği.
Örneğin
git log pom.xml | perl gldiff.pl 3 pom.xml
Verim:
git diff 5cc287:pom.xml e8e420:pom.xml
git diff 3aa914:pom.xml 7476e1:pom.xml
git diff 422bfd:pom.xml f92ad8:pom.xml
daha sonra kesilebilir ve bir kabuk penceresi oturumunda yapıştırılabilir veya borulara geçirilebilir /bin/sh
.
Notlar:
Kod:
# gldiff.pl
use strict;
my $max = shift;
my $file = shift;
die "not a number" unless $max =~ m/\d+/;
die "not a file" unless -f $file;
my $count;
my @lines;
while (<>) {
chomp;
next unless s/^commit\s+(.*)//;
my $commit = $1;
push @lines, sprintf "%s:%s", substr($commit,0,6),$file;
if (@lines == 2) {
printf "git diff %s %s\n", @lines;
@lines = ();
}
last if ++$count >= $max *2;
}
Mipadi tarafından belirtilen yöntemle birden fazla dosyayla fark oluşturmak istiyorsanız:
Örneğin , tüm dosyaları bulmak HEAD
için diff arasında ve sizin master
,.coffee
git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`
Bu, your_search_folder/
tüm .coffee
dosyalarınızı özyinelemeli olarak arayacak ve dosyalar ve master
sürümleri arasında bir fark yaratacaktır .
Birden fazla dosya veya dizininiz varsa ve sürekli olmayan taahhütleri karşılaştırmak istiyorsanız, bunu yapabilirsiniz:
Geçici bir dal oluşturun ( bu örnekte "revizyon" )
git checkout -b revision
İlk taahhüt hedefine geri sarma
git reset --hard <commit_target>
İlgililer bu kiraz toplama
git cherry-pick <commit_interested> ...
Fark uygula
git diff <commit-target>^
Bittiğinde
git branch -D revision
Windows'ta Visual SourceSafe veya Team Foundation Server (TFS) gibi basit bir görsel karşılaştırma yapmak istiyorsanız , şunu deneyin:
Not: Windows 10'a yükselttikten sonra Git içerik menüsü seçeneklerini kaybettim. Ancak, komut penceresinde 'gitk' veya 'gitk dosyaadı' kullanarak da aynı şeyi yapabilirsiniz.
'Git Geçmişi'ni çağırdığınızda, Git GUI aracı, sol üst bölmedeki dosyanın geçmişiyle başlayacaktır. Karşılaştırmak istediğiniz sürümlerden birini seçin. Ardından ikinci sürüme sağ tıklayın ve birini seçin
Bunu farket -> seçildi
veya
Fark seçildi -> bu
Sol alt bölmede renk kodlu farklılıklar görünecektir.
..
O (belki, oldukça eski sürümleri hariç) çalışma olacak olsa da, gerçekten gerekli değildir. İki taahhüt birbirinden çok uzaktaysa, SHA1'leri de kullanabilirgit log
veyagitk
bulabilirsin.gitk
ayrıca içerik menüsünde "fark seçili -> bu" ve "fark bu -> seçili" vardır.