Làm cách nào để tạo ra sự khác biệt cho một tệp duy nhất giữa hai nhánh trong github


111

Tôi cần tạo một khác biệt cho một tệp duy nhất sẽ hiển thị sự khác biệt giữa hai phiên bản, chúng thực sự là các thẻ trong github. Sau đó, tôi muốn gửi khác biệt này cho ai đó qua email để một URL github cho khác biệt sẽ là lý tưởng. Chế độ xem so sánh github sẽ cho phép tôi thực hiện việc này đối với tất cả các tệp đã thay đổi, nhưng điều đó không tốt vì có hàng nghìn tệp trong kho lưu trữ của tôi.

Tôi có thể thực hiện việc này trong dòng lệnh như sau, nhưng điều này không hữu ích vì tôi cần gửi sự khác biệt cho ai đó qua email:

git diff tag1 tag2 -- path/to/file

Tôi đã tìm thấy phiên bản dòng lệnh được thảo luận ở đây: làm cách nào tôi có thể thấy sự khác biệt trong tệp được chỉ định giữa chi nhánh cục bộ và chi nhánh từ xa?

Câu trả lời:


90

GitHub chỉ đưa ra cách hiển thị sự khác biệt giữa hai cam kết.

Với điều kiện các thẻ đó thực sự trỏ đến các cam kết, định dạng Url sẽ giống như

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

Ví dụ: https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 cho thấy sự khác biệt giữa hai phiên bản của dự án LibGit2Sharp. Khác biệt này bao gồm tất cả các tệp đã sửa đổi.

Nếu bạn muốn truy xuất url nhắm mục tiêu một tệp cụ thể:

  • Chuyển sang tab Tệp đã thay đổi

tab đã thay đổi

  • Nhấp vào nút Show Diff Stats (Thao tác này sẽ hiển thị danh sách các tệp đã sửa đổi dưới dạng liên kết)

show-diff

  • Sao chép vào khay nhớ tạm liên kết của tệp cụ thể mà bạn đang theo dõi ... và Tada! Bạn đã hoàn tất.

Ví dụ: với sự khác biệt ở trên, liên kết https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 sẽ trỏ đến những LazyFixtures.csthay đổi xảy ra giữa phiên bản v0.9.0 và v0.9.5.

Cập nhật

Sau nhận xét của bạn, nói rằng sự khác biệt của bạn quá lớn để được hiển thị qua giao diện Web, vậy còn việc hoàn nguyên về công cụ dòng lệnh cũ tốt thì sao? Bạn có thể chuyển hướng đầu ra của khác biệt thành một tệp và sau đó gửi tệp đó dưới dạng tệp đính kèm email.

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

8
Xin chào, có vẻ như điều này sẽ không hiệu quả với tôi vì chênh lệch của tôi quá lớn. Tôi nhận được "Sự khác biệt này rất lớn! Chúng tôi chỉ hiển thị thông tin trạng thái cho 2.500 tệp đầu tiên." vì vậy tôi chỉ nhận được Số liệu thống kê khác biệt chứ không nhận được sự khác biệt đầy đủ, ngay cả với các liên kết #diff.
pureflavour

1
tuy nhiên tôi nghĩ bạn đúng - đó là cách để làm điều đó. Cảm ơn
trơn tru

1
Bạn cũng có thể sử dụng tiện ích mở rộng Chrome này github.com/danielribeiro/github-diff-highlight-extension để đánh dấu cú pháp khi so sánh các nhánh.
Daniel Ribeiro

3
@plainflavour Một mẹo hữu ích nữa ở đây trong trường hợp bạn lại gặp phải vấn đề này - bất cứ khi nào bạn có URL so sánh như @nulltoken đã chỉ ra, bạn cũng có thể chỉ cần thêm .diff vào cuối URL để xem toàn bộ khác biệt (mặc dù dưới dạng văn bản rõ ). Ví dụ: https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff Nguồn
dmccabe

1
Tôi không thấy nút Hiển thị số liệu thống kê chênh lệch . Nó đã biến mất? Hay là tôi không nhìn thấy nó?
dckc

7

Đây là giải pháp của tôi khi sự cố sau áp dụng.

So sánh này là lớn! Chúng tôi chỉ hiển thị 250 cam kết gần đây nhất

Sao chép chế độ xem thô của tệp mà bạn muốn so sánh với https://gist.github.com/ . Sử dụng hai điểm cam kết cụ thể mà bạn muốn so sánh. Bắt đầu với cam kết cũ hơn.

https://gist.github.com/ có chế độ xem khác biệt song song rất đẹp khi bạn nhấp vào 'Bản sửa đổi'.


3
Cảm ơn bạn, đây chính xác là gợi ý tôi cần cho gist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/… ! :)
ncoghlan

3

Câu trả lời dành cho những người muốn chỉ xem (Không tải xuống) lịch sử / sự phục hồi của các thay đổi mã của một tệp trong Trang WEB GITHUB để đăng ký trước.

Chuyển đến tệp đó trong github, sau đó chọn LỊCH SỬ . Điều này sẽ mở ra trang với danh sách các liên kết đăng ký nhận xét như bên dưới.

nhập mô tả hình ảnh ở đây Khi nhấp vào nó sẽ hiển thị các thay đổi mã. Sau khi nhấp vào lịch sử; bạn có thể nhấp vào các gói để xem cấp độ gói tất cả các lần kiểm tra tệp.

Trong eclipse, bạn có thể so sánh lịch sử bằng cách sử dụng plugin EGit và "Nhấp chuột phải -> So sánh với" trên tệp. Làm cách nào để so sánh hai bản sửa đổi trong git trong Eclipse?


1
Để rõ ràng hơn, bạn nhấp vào "tên" gồm 7 chữ số hex của cam kết (không có nhãn hoặc mẹo công cụ khi bạn di chuột qua nó, nó gần phía bên tay phải, ngay bên cạnh "sao chép vào khay nhớ tạm" biểu tượng), và điều đó sẽ đưa bạn đến một trang hiển thị sự khác biệt giữa phiên bản của cam kết đó và những gì tôi cho là phiên bản trước đó.
JonathanZ hỗ trợ MonicaC

@Jonathan Vâng; điều đó đúng
Kanagavelu Sugumar

Này, lần trước tôi không thấy ảnh chụp màn hình đó. Tôi không biết có phải lúc đó nó không tải cho tôi hay bạn đã thêm nó kể từ đó hay không, nhưng dù sao thì cũng cảm ơn câu trả lời của bạn; Thật tuyệt vời.
JonathanZ hỗ trợ MonicaC

Đối với cam kết 5000 tệp, điều này không đưa tôi đến sự khác biệt của tệp đơn. Từ lịch sử này , hãy thử tìm delta cho tệp đó từ cam kết lớn này .
Carl Walsh

0

Tôi đã sử dụng câu trả lời của nulltoken để tập hợp một tập lệnh thuận tiện đơn giản để tạo ra sự khác biệt giữa hai cam kết trên GitHub từ dòng lệnh.

Bạn có thể tìm thấy toàn bộ tập lệnh trên ý chính , nhưng đây là những điểm tốt:

# 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

Nó chấp nhận như các nhánh đối số, các cam kết và bất kỳ thứ gì khác có thể được giải quyết bằng git rev-parse. Tôi đã sử dụng open, tính năng này chỉ hoạt động trên macOS để mở các trang web, vì vậy nếu bạn đang ở một môi trường khác, bạn sẽ muốn điều chỉnh điều đó.

Giống như câu trả lời của nulltoken, để trỏ đến một tệp duy nhất trong khác biệt, bạn sẽ phải nhấp vào tiêu đề của tệp để làm cho chuỗi ký tự liên kết xuất hiện trong thanh url, sau đó bạn có thể sao chép.


bất kỳ cách nào để lấy chuỗi liên kết để so sánh không hiển thị tệp mong muốn vì có quá nhiều trong số chúng?
sgarg

@sgarg Mỏ neo là "diff- <md5 of the filename>" - không được ghi lại AFAIK - nhưng nó làm tôi khó chịu và tôi đoán vậy.
Ben Walding

0

Vì điều này vẫn không thể thực hiện được, đây là một phương pháp công cụ khác dựa trên trình duyệt. Nó không tận dụng tự động hóa mà chỉ yêu cầu khả năng cài đặt các tiện ích mở rộng của Chrome:

  1. Cài đặt Công cụ khác biệt cho trình duyệt Chrome: https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Mở Công cụ khác biệt ( http://iblogbox.com/devtools/diff/ )
  3. Từ GitHub, đi tới cam kết TRƯỚC KHI cam kết, thẻ hoặc nhánh, mở tệp, sau đó nhấp vào Raw nút để xem tệp thô, chọn tất cả và sao chép, sau đó đặt vào hộp văn bản bên trái trong Công cụ khác biệt
  4. Lặp lại bước 3 nhưng đối với tệp SAU và dán vào hộp bên phải trong Công cụ khác biệt
  5. Nhấp Compare Nowvà thực hiện đặc biệt khác biệt của bạn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.