Bagaimana kita bisa mendapatkan perbedaan antara dua repositori git?
Skenario: Kami memiliki repo_a dan repo_b. Yang terakhir dibuat sebagai salinan repo_a. Ada perkembangan paralel di kedua repositori sesudahnya. Apakah ada cara kita dapat membuat daftar perbedaan dari versi saat ini dari dua repositori ini?
Jawaban:
Dalam repo_a:
sumber
origin/master
daripada telanjangmaster
. Juga, ini menemukan perbedaan antara cabang-cabang utama, jadi bagaimana jika Anda ingin menemukan semua cabang yang berbeda? Misalnya untuk memeriksa status cadangan repositori?Meld dapat membandingkan direktori:
Cukup gunakan direktori dari dua repo git dan Anda akan mendapatkan perbandingan grafis yang bagus:
Ketika Anda mengklik salah satu item biru, Anda dapat melihat apa yang berubah.
sumber
Anda dapat menambahkan repo lain terlebih dahulu sebagai remote ke repo Anda saat ini:
lalu ambil brach dari jarak jauh itu:
ini membuat cabang itu sebagai cabang baru di repo Anda saat ini, maka Anda dapat membedakan cabang itu dengan cabang mana saja, misalnya, untuk membandingkan cabang saat ini dengan cabang baru (branch_name):
sumber
Setelah Anda memiliki kedua cabang dalam satu repositori, Anda dapat melakukan a
git diff
. Dan mendapatkannya dalam satu repositori semudahsumber
Itu tidak benar.
remotes/b
adalah remote, tetapi bukan cabang.Untuk membuatnya bekerja, saya harus melakukan:
sumber
Lihat http://git.or.cz/gitwiki/GitTips , bagian "Cara membandingkan dua repositori lokal" di "Umum".
Singkatnya Anda menggunakan variabel lingkungan GIT_ALTERNATE_OBJECT_DIRECTORIES untuk memiliki akses ke database objek dari repositori lain, dan menggunakan git rev-parse dengan
--git-dir
/ GIT_DIR untuk mengonversi nama simbolis dalam repositori lain ke pengidentifikasi SHA-1.Versi modern akan terlihat seperti ini (dengan asumsi Anda berada di 'repo_a'):
di mana
../repo_b/.git
path ke objek database di repo_b (itu akan menjadi repo_b.git jika itu repositori telanjang). Tentu saja Anda dapat membandingkan versi sewenang-wenang, tidak hanya KEPALA.Perhatikan bahwa jika repo_a dan repo_b adalah repositori yang sama, mungkin lebih masuk akal untuk menempatkan keduanya dalam repositori yang sama, baik menggunakan "
git remote add -f ...
" untuk membuat nama panggilan untuk repositori untuk pembaruan berulang, atau mengabaikan "git fetch ...
"; seperti yang dijelaskan dalam tanggapan lain.sumber
Saya menggunakan PyCharm yang memiliki kemampuan hebat untuk membandingkan antara folder dan file.
Cukup buka folder induk untuk kedua repo dan tunggu hingga indeks. Kemudian Anda dapat menggunakan klik kanan pada folder atau file dan
Compare to...
dan memilih folder / file yang sesuai di sisi lain.Ini menunjukkan tidak hanya file apa yang berbeda tetapi juga isinya. Jauh lebih mudah daripada baris perintah.
sumber
Taruhan terbaik Anda adalah memiliki kedua repo di mesin lokal Anda dan menggunakan perintah diff linux dengan dua direktori sebagai parameter:
diff -r repo-A repo-B
sumber
Cara mudah untuk melakukannya tanpa menyentuh konfigurasi remote Anda. Dari repo A, di master (anggap Anda ingin membandingkan cabang master):
sumber
Anda dapat menggunakan perintah berikut:
atau untuk berdampingan Anda dapat menggunakan:
Jika Mewarnai setiap file berbeda, Anda dapat menggunakan:
sumber
Pengingat untuk diri sendiri ... ambil dulu, kalau tidak repositori belum hash lokal (kurasa).
langkah 1. Atur remote upstream dan di atasnya ^
diffing satu file mengikuti pola ini:
git beda localBranch uptreamBranch --spacepath / singlefile
git diff master upstream/nameofrepo -- src/index.js
sumber