Bagaimana saya bisa menghasilkan diff untuk satu file antara dua cabang di github

111

Saya perlu membuat diff untuk satu file yang akan menunjukkan perbedaan antara dua versi, yang sebenarnya adalah tag di github. Saya kemudian ingin mengirim diff ini ke seseorang melalui email sehingga URL github untuk diff akan ideal. Tampilan perbandingan github memungkinkan saya melakukan ini untuk semua file yang diubah, tetapi itu tidak bagus karena ada ribuan file di repo saya.

Saya dapat melakukan ini di baris perintah sebagai berikut, tetapi ini tidak membantu karena saya perlu mengirim diff ke seseorang melalui email:

git diff tag1 tag2 -- path/to/file

Saya menemukan versi baris perintah yang dibahas di sini: bagaimana saya bisa melihat perbedaan dalam file yang ditentukan antara cabang lokal dan cabang jarak jauh?

rasa biasa
sumber

Jawaban:

90

GitHub hanya memperlihatkan cara untuk menunjukkan perbedaan antara dua komit.

Asalkan tag tersebut benar-benar mengarah ke komit, format Url akan menjadi seperti ini

https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}

Sebagai contoh, https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 menunjukkan perbedaan antara dua versi proyek LibGit2Sharp. Perbedaan ini mencakup semua file yang dimodifikasi.

Jika Anda ingin mengambil url yang menargetkan file tertentu:

  • Beralih ke tab File Berubah

berubah-tab

  • Klik pada tombol Show Diff Stats (Ini akan menampilkan daftar file yang dimodifikasi sebagai link)

show-diff

  • Salin ke papan klip tautan dari file tertentu yang Anda cari ... dan Tada! Kamu sudah selesai.

Misalnya, dengan perbedaan di atas, tautan https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 akan menunjukkan LazyFixtures.csperubahan yang terjadi antara versi v0.9.0 dan v0.9.5.

Memperbarui

Mengikuti komentar Anda yang menyatakan bahwa diff Anda terlalu besar untuk ditampilkan melalui antarmuka Web, bagaimana jika kembali ke perkakas baris perintah lama yang baik? Anda dapat mengarahkan keluaran dari diff ke sebuah file dan kemudian mengirimkan file tersebut sebagai lampiran email.

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff
nulltoken
sumber
8
Hai, sepertinya ini tidak akan berhasil untuk saya karena perbedaan saya terlalu besar. Saya mendapatkan "Perbedaan ini besar! Kami menampilkan informasi status hanya untuk 2.500 file pertama." jadi saya hanya mendapatkan Diff Stats dan bukan diff penuh, bahkan dengan tautan #diff.
rasa polos
1
bagaimanapun saya pikir Anda benar - itulah cara untuk melakukannya. Terima kasih
plainflavour
1
Anda juga dapat menggunakan ekstensi Chrome ini github.com/danielribeiro/github-diff-highlight-extension untuk mendapatkan sorotan sintaks saat membandingkan cabang.
Daniel Ribeiro
3
@plainflavour Satu lagi tip berguna di sini jika Anda mengalami ini lagi - kapan pun Anda memiliki URL pembanding seperti yang ditunjukkan @nulltoken, Anda juga dapat menambahkan .diff di akhir URL untuk melihat diff lengkap (meskipun sebagai teks biasa ). Misalnya https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff Sumber
dmccabe
1
Saya tidak melihat tombol Show Diff Stats . Apakah itu hilang? Atau apakah saya hanya tidak melihatnya?
dckc
7

Berikut adalah solusi saya ketika masalah berikut berlaku.

Perbandingan ini besar! Kami hanya menampilkan 250 komit terbaru

Salin tampilan mentah dari file yang ingin Anda bandingkan dengan https://gist.github.com/ . Gunakan dua titik komit spesifik yang ingin Anda bandingkan. Mulailah dengan komit yang lebih lama.

https://gist.github.com/ memiliki tampilan berbeda berdampingan yang bagus saat Anda mengeklik 'Revisi'.

f01
sumber
3
Terima kasih, ini adalah persis saran saya butuhkan untuk gist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/... ! :)
ncoghlan
3

Jawaban adalah untuk orang-orang yang hanya ingin melihat (Tidak mengunduh) sejarah / pemulihan perubahan kode file di Halaman WEB GITHUB untuk check in sebelumnya.

Buka file itu di github, lalu pilih SEJARAH . Ini akan membuka halaman dengan daftar link komentar checkin seperti di bawah ini.

masukkan deskripsi gambar di sini Saat mengklik itu akan menunjukkan perubahan kode. Setelah mengklik sejarah; Anda dapat mengklik paket untuk melihat tingkat paket semua file yang masuk.

Di eclipse Anda dapat membandingkan sejarah menggunakan plugin EGit dan "Klik kanan -> Bandingkan dengan" pada file. Bagaimana cara membandingkan dua revisi di git di Eclipse?

Kanagavelu Sugumar
sumber
1
Untuk lebih eksplisitnya, Anda mengklik 7 digit hex "nama" dari komit (tidak ada label atau tip alat saat Anda mengarahkan kursor ke atasnya, itu dekat sisi kanan, tepat di sebelah "salin ke clipboard" ikon), dan itu akan membawa Anda ke halaman yang menunjukkan perbedaan antara versi komit itu, dan apa yang saya asumsikan sebagai versi sebelumnya.
JonathanZ mendukung MonicaC
@Jonathan Ya; itu benar
Kanagavelu Sugumar
Hei, saya tidak melihat tangkapan layar itu terakhir kali saya melihat. Saya tidak tahu apakah itu tidak memuat untuk saya saat itu atau jika Anda telah menambahkannya sejak saat itu, tetapi bagaimanapun juga terima kasih atas jawaban Anda; itu bagus.
JonathanZ mendukung MonicaC
Untuk komit 5000 file, ini tidak membawa saya ke diff file tunggal. Dari riwayat ini , coba temukan delta ke file itu dari komit besar ini .
Carl Walsh
0

Saya menggunakan jawaban nulltoken untuk menyusun skrip kenyamanan sederhana untuk menarik perbedaan antara dua komit di GitHub dari baris perintah.

Anda dapat menemukan skrip lengkapnya di intinya , tetapi berikut adalah bagian yang bagus:

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# [email protected]:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"

if [[ "$#" -eq 1 ]]; then
  if [[ "$1" =~ .*\.\..* ]]; then
    # Handle "git hubdiff fromcommit..tocommit"
    open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
  else
    # Handle "git hubdiff fromcommit"
    open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
  fi
elif [[ "$#" -eq 2 ]]; then
  # Handle "git hubdiff fromcommit tocommit"
  open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi

Itu menerima sebagai cabang argumen, komit, dan apa pun yang dapat diselesaikan oleh git rev-parse. Saya menggunakan open, yang hanya berfungsi di macOS untuk membuka halaman web, jadi jika Anda berada di lingkungan yang berbeda, Anda pasti ingin mengubahnya.

Seperti jawaban nulltoken, untuk menunjuk ke satu file di diff, Anda harus mengklik judul file untuk membuat string jangkar muncul di bilah url, yang kemudian dapat Anda salin.

Chris
sumber
cara apa pun untuk mendapatkan string jangkar untuk perbandingan yang tidak menampilkan file yang diinginkan karena jumlahnya terlalu banyak?
sgarg
@sgarg Jangkar adalah "diff- <md5 of the filename>" - tidak didokumentasikan AFAIK - tapi itu mengganggu saya dan saya menebaknya.
Ben Walding
0

Karena ini masih tidak mungkin, inilah metode alat-diff berbasis browser. Itu tidak memanfaatkan otomatisasi tetapi hanya membutuhkan kemampuan untuk menginstal ekstensi Chrome:

  1. Pasang Alat Diff untuk peramban Chrome: https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Buka Diff Tools ( http://iblogbox.com/devtools/diff/ )
  3. Dari GitHub pergi ke SEBELUM komit, tag, atau cabang, buka file, lalu klik Rawtombol untuk mendapatkan tampilan file mentah, pilih-semua dan salin, lalu letakkan di kotak teks sisi kiri di Alat Diff
  4. Ulangi langkah 3 tetapi untuk file SETELAH dan tempelkan ke kotak sisi kanan di Alat Diff
  5. Klik Compare Nowdan lakukan diff ad-hoc Anda
kayleeFrye_onDeck
sumber