ฉันจะสร้างความแตกต่างสำหรับไฟล์เดียวระหว่างสองสาขาใน github ได้อย่างไร


112

ฉันต้องการสร้างความแตกต่างสำหรับไฟล์เดียวที่จะแสดงความแตกต่างระหว่างสองเวอร์ชันซึ่งจริงๆแล้วคือแท็กใน github จากนั้นฉันต้องการส่งความแตกต่างนี้ให้ใครบางคนทางอีเมลดังนั้น github URL สำหรับ diff จะเหมาะที่สุด มุมมองเปรียบเทียบ github จะอนุญาตให้ฉันทำสิ่งนี้กับไฟล์ที่เปลี่ยนแปลงทั้งหมด แต่ก็ไม่ดีเพราะมีไฟล์หลายพันไฟล์ใน repo ของฉัน

ฉันสามารถทำได้ในบรรทัดคำสั่งดังต่อไปนี้ แต่มันไม่ได้ช่วยอะไรเพราะฉันต้องส่งความแตกต่างให้ใครทางอีเมล:

git diff tag1 tag2 -- path/to/file

ฉันพบเวอร์ชันบรรทัดคำสั่งที่กล่าวถึงที่นี่: ฉันจะเห็นความแตกต่างในไฟล์ที่กำหนดระหว่างสาขาภายในและสาขาระยะไกลได้อย่างไร

คำตอบ:


91

GitHub แสดงเฉพาะวิธีแสดงความแตกต่างระหว่างสองคอมมิตเท่านั้น

หากแท็กเหล่านั้นชี้ไปที่คอมมิตจริง ๆ แล้วรูปแบบ URL จะเป็นอย่างไร

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

ดังตัวอย่างhttps://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5แสดงความแตกต่างระหว่างสองเวอร์ชันของโครงการ LibGit2Sharp ความแตกต่างนี้รวมถึงไฟล์ที่แก้ไขทั้งหมด

หากคุณต้องการดึง url ที่กำหนดเป้าหมายไฟล์เฉพาะ:

  • เปลี่ยนไปที่แท็บไฟล์ที่เปลี่ยนแปลง

เปลี่ยนแท็บ

  • คลิกที่ปุ่มShow Diff Stats (จะแสดงรายการไฟล์ที่แก้ไขเป็นลิงค์)

แสดงความแตกต่าง

  • คัดลอกลิงก์ของไฟล์ที่คุณต้องการไปยังคลิปบอร์ด ... และ Tada! เสร็จแล้ว

ตัวอย่างเช่นหากได้รับความแตกต่างด้านบนลิงก์https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11จะชี้ไปที่LazyFixtures.csการเปลี่ยนแปลงที่เกิดขึ้นระหว่างเวอร์ชัน v0.9.0 และ v0.9.5

อัปเดต

ตามความคิดเห็นของคุณซึ่งระบุว่าความแตกต่างของคุณใหญ่เกินกว่าที่จะแสดงผลผ่านอินเทอร์เฟซเว็บแล้วการเปลี่ยนกลับไปใช้เครื่องมือบรรทัดคำสั่งแบบเก่าดีไหม? คุณสามารถเปลี่ยนทิศทางผลลัพธ์ของ diff ไปยังไฟล์แล้วส่งไฟล์เป็นไฟล์แนบอีเมล

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff

9
สวัสดีดูเหมือนว่านี่จะใช้ไม่ได้สำหรับฉันเพราะค่าต่างของฉันใหญ่เกินไป ฉันได้รับ "ความแตกต่างนี้ใหญ่มากเรากำลังแสดงข้อมูลสถานะสำหรับ 2,500 ไฟล์แรกเท่านั้น" ดังนั้นฉันจึงได้รับสถิติความแตกต่างเท่านั้นและไม่ได้รับความแตกต่างทั้งหมดแม้จะมีลิงก์ #diff ก็ตาม
แป้งธรรมดา

1
อย่างไรก็ตามฉันคิดว่าคุณพูดถูก - นั่นคือวิธีที่จะทำ ขอบคุณ
plainflavour

1
คุณยังสามารถใช้ส่วนขยาย Chrome นี้github.com/danielribeiro/github-diff-highlight-extensionเพื่อเน้นไวยากรณ์เมื่อเปรียบเทียบสาขา
Daniel Ribeiro

3
@plainflavour อีกหนึ่งเคล็ดลับที่มีประโยชน์ในกรณีที่คุณพบปัญหานี้อีกครั้ง - เมื่อใดก็ตามที่คุณมี URL เปรียบเทียบเช่น @nulltoken ที่ระบุไว้คุณสามารถเพิ่ม. diff ต่อท้าย URL เพื่อดูความแตกต่างทั้งหมด (แม้ว่าจะเป็นข้อความธรรมดา ). เช่นhttps://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff ที่มา
dmccabe

1
ฉันไม่เห็นปุ่มแสดงสถิติความแตกต่าง มันหายไปหรือเปล่า? หรือฉันแค่มองไม่เห็น?
dckc

7

นี่คือวิธีแก้ปัญหาของฉันเมื่อเกิดปัญหาต่อไปนี้

การเปรียบเทียบนี้ใหญ่มาก! เรากำลังแสดงเฉพาะ 250 คอมมิตล่าสุด

คัดลอกมุมมองดิบของไฟล์ที่คุณต้องการที่จะเปรียบเทียบกับhttps://gist.github.com/ ใช้จุดคอมมิตเฉพาะสองจุดที่คุณต้องการเปรียบเทียบ เริ่มต้นด้วยการกระทำที่เก่ากว่า

https://gist.github.com/มีมุมมองที่แตกต่างแบบเคียงข้างกันเมื่อคุณคลิก "การแก้ไข"


3
ขอบคุณนี่คือว่าข้อเสนอแนะที่ฉันต้องการสำหรับgist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/... ! :)
ncoghlan

3

คำตอบสำหรับผู้ที่ต้องการดู (ไม่ดาวน์โหลด) ประวัติ / การเปลี่ยนแปลงโค้ดของไฟล์ใน GITHUB WEB Page สำหรับการเช็คอินก่อนหน้าเท่านั้น

ไปที่ไฟล์ว่าใน GitHub จากนั้นเลือกประวัติศาสตร์ ซึ่งจะเปิดหน้าพร้อมรายการลิงก์ความคิดเห็นเช็คอินด้านล่าง

ป้อนคำอธิบายภาพที่นี่ เมื่อคลิกที่มันจะแสดงการเปลี่ยนแปลงรหัส หลังจากคลิกประวัติ; คุณสามารถคลิกที่แพ็คเกจเพื่อดูระดับแพ็กเกจเช็คอินไฟล์ทั้งหมด

ใน eclipse คุณสามารถเปรียบเทียบประวัติโดยใช้ปลั๊กอินEGitและ "คลิกขวา -> เปรียบเทียบกับ" บนไฟล์ ฉันจะเปรียบเทียบการแก้ไขสองรายการใน git ใน Eclipse ได้อย่างไร


1
เพื่อให้ชัดเจนยิ่งขึ้นให้คลิกที่ "ชื่อ" เลขฐานสิบหก 7 หลักของคอมมิต (ไม่มีป้ายกำกับหรือปลายเครื่องมือเมื่อคุณวางเมาส์เหนือตำแหน่งนั้นอยู่ใกล้ด้านขวามือถัดจาก "คัดลอกไปยังคลิปบอร์ด" icon) และจะนำคุณไปยังหน้าที่แสดงความแตกต่างระหว่างเวอร์ชันของคอมมิตนั้นและสิ่งที่ฉันคิดว่าเป็นเวอร์ชันก่อนหน้า
JonathanZ สนับสนุน MonicaC

@ โจนาธานเย้; นั่นเป็นความจริง
Kanagavelu Sugumar

เฮ้ฉันไม่เห็นการจับภาพหน้าจอครั้งที่แล้วที่ฉันดู ฉันไม่รู้ว่ามันยังไม่โหลดให้ฉันหรือว่าคุณได้เพิ่มตั้งแต่นั้นมา แต่อย่างใดขอบคุณสำหรับคำตอบของคุณ มันยอดเยี่ยมมาก
JonathanZ สนับสนุน MonicaC

สำหรับการคอมมิตไฟล์ 5,000 ไฟล์สิ่งนี้ไม่ได้นำฉันไปสู่ความแตกต่างของไฟล์เดียว จากประวัตินี้ให้ลองค้นหาเดลต้าของไฟล์นั้นจากคอมมิตขนาดใหญ่นี้
Carl Walsh

0

ฉันใช้คำตอบของ nulltokenเพื่อรวบรวมสคริปต์อำนวยความสะดวกง่ายๆสำหรับการดึงความแตกต่างระหว่างสองคอมมิตบน GitHub จากบรรทัดคำสั่ง

คุณสามารถค้นหาสคริปต์ฉบับเต็มได้ในส่วนสำคัญแต่นี่คือส่วนที่ดี:

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# git@github.com: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

git rev-parseมันรับเป็นสาขาการขัดแย้งกระทำและสิ่งอื่นที่สามารถแก้ไขได้โดย ฉันใช้openซึ่งใช้ได้กับ macOS สำหรับการเปิดหน้าเว็บเท่านั้นดังนั้นหากคุณอยู่ในสภาพแวดล้อมอื่นคุณจะต้องปรับแต่งสิ่งนั้น

เช่นเดียวกับคำตอบของ nulltoken หากต้องการชี้ไปที่ไฟล์เดียวใน diff คุณจะต้องคลิกที่ชื่อไฟล์เพื่อให้สตริง anchor ปรากฏในแถบ url ซึ่งคุณสามารถคัดลอกได้


วิธีใดในการรับสตริงจุดยึดสำหรับการเปรียบเทียบที่ไม่แสดงไฟล์ที่ต้องการเนื่องจากมีจำนวนมากเกินไป
sgarg

@sgarg จุดยึดคือ "diff- <md5 of the filename>" - ไม่มีเอกสาร AFAIK - แต่มันทำให้ฉันรำคาญและฉันก็เดาได้
Ben Walding

0

เนื่องจากยังไม่สามารถทำได้นี่คือวิธีการเครื่องมือที่ใช้เบราว์เซอร์ ไม่ได้ใช้ประโยชน์จากระบบอัตโนมัติ แต่ต้องการความสามารถในการติดตั้งส่วนขยาย Chrome เท่านั้น:

  1. ติดตั้ง Diff Tools สำหรับเบราว์เซอร์ Chrome: https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. เปิดเครื่องมือ Diff ( http://iblogbox.com/devtools/diff/ )
  3. จาก GitHub ไปที่ก่อนคอมมิตแท็กหรือสาขาเปิดไฟล์จากนั้นคลิกที่Rawปุ่มเพื่อดูไฟล์ดิบเลือกทั้งหมดและคัดลอกจากนั้นใส่ในกล่องข้อความด้านซ้ายมือในเครื่องมือต่าง
  4. ทำซ้ำขั้นตอนที่ 3 แต่สำหรับไฟล์ AFTER แล้ววางลงในกล่องด้านขวามือใน Diff Tools
  5. คลิกCompare Nowและดำเนินการเฉพาะกิจของคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.