Di Git, bagaimana aku bisa membandingkan file yang sama di antara dua orang yang berbeda melakukan (tidak berurutan) pada cabang yang sama (master misalnya)?
I'm mencari membandingkan * fitur seperti yang ada di Visual SourceSafe (VSS) atau Team Foundation Server (TFS). Apakah mungkin di Git?
Dari git-diff
halaman manual:
git diff [--options] <commit> <commit> [--] [<path>...]
Misalnya, untuk melihat perbedaan untuk file "utama.c" antara sekarang dan dua melakukan kembali, berikut adalah tiga setara dengan perintah:
$ git diff HEAD^^ HEAD main.c
$ git diff HEAD^^..HEAD -- main.c
$ git diff HEAD~2 HEAD -- main.c
Jika anda telah mengkonfigurasi "difftool" anda dapat menggunakan
git difftool revision_1:file_1 revision_2:file_2
Contoh: Membandingkan file dari komit terakhir untuk commit sebelumnya pada cabang yang sama: Dengan asumsi bahwa jika anda berada di root folder proyek anda
$git difftool HEAD:src/main/java/com.xyz.test/MyApp.java HEAD^:src/main/java/com.xyz.test/MyApp.java
Anda harus memiliki entri berikut dalam file ~/.gitconfig atau di proyek/.git/config. Menginstal p4merge [Ini adalah pilihan saya diff dan merge]
[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\"
Berikut ini adalah script perl yang mencetak git diff perintah untuk file tertentu seperti yang ditemukan di git log perintah.
misalnya
git log pom.xml | perl gldiff.pl 3 pom.xml
Hasil:
git diff 5cc287:pom.xml e8e420:pom.xml
git diff 3aa914:pom.xml 7476e1:pom.xml
git diff 422bfd:pom.xml f92ad8:pom.xml
yang kemudian bisa dipotong N disisipkan dalam shell jendela sesi atau disalurkan ke /bin/sh.
Catatan:
Kode:
# 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;
}
Jika anda memiliki beberapa file atau direktori dan ingin membandingkan non terus menerus melakukan, anda bisa melakukan hal ini:
Membuat temporal cabang
git checkout -b revision
Mundur untuk pertama melakukan target
git reset --hard <commit_target>
Cherry picking pada orang-orang tertarik melakukan
git cherry-pick <commit_interested> ...
Menerapkan diff
git diff <commit-target>^
Ketika anda selesai
git branch -D revision
Jika anda ingin membuat perbedaan dengan file lebih dari satu, dengan metode yang ditentukan oleh @mipadi:
E. g. perbedaan antara KEPALA
dan master
, untuk menemukan semua .kopi
files:
git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`
Ini akan secara rekursif pencarian anda your_search_folder/
untuk semua .kopi
file dan membuat perbedaan di antara mereka dan mereka menguasai
versi.
Jika anda ingin sederhana perbandingan visual pada Windows seperti yang anda bisa mendapatkan di VSS atau TFS, coba ini:
Catatan: Setelah upgrade ke Windows 10 saya telah kehilangan git pilihan menu konteks. Namun, anda dapat mencapai hal yang sama dengan menggunakan 'gitk' atau 'gitk nama file' di jendela perintah.
Setelah anda memanggil 'Git Sejarah', Git GUI tool akan mulai dengan sejarah file di kiri atas panel. Pilih salah satu versi yang ingin anda bandingkan. Kemudian klik kanan pada versi kedua dan memilih
Diff ini -> dipilih
atau
Diff dipilih -> ini
Kode warna perbedaan yang akan muncul di bagian kiri bawah panel.