GitHub có thể hiển thị lịch sử các thay đổi được thực hiện cho một tệp ở dạng bản vá không?


88

Nếu bạn làm như vậy git log --patch -- path/to/file, bạn sẽ nhận được lịch sử của tệp cùng với sự khác biệt của tất cả các thay đổi được thực hiện với mỗi lần cam kết, như sau:

$ git log --patch -- git-rebase.sh

commit 20351bb06bf4d32ef3d1a6849d01636f6593339f
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Sat Jun 15 18:43:26 2013 +0530

    rebase: use 'git stash store' to simplify logic

    rebase has no reason to know about the implementation of the stash.  In
    the case when applying the autostash results in conflicts, replace the
    relevant code in finish_rebase () to simply call 'git stash store'.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..17be392 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -153,11 +153,8 @@ finish_rebase () {
                then
                        echo "$(gettext 'Applied autostash.')"
                else
-                       ref_stash=refs/stash &&
-                       >>"$GIT_DIR/logs/$ref_stash" &&
-                       git update-ref -m "autostash" $ref_stash $stash_sha1 ||
-                       die "$(eval_gettext 'Cannot store $stash_sha1')"
-
+                       git stash store -m "autostash" -q $stash_sha1 ||
+                       die "$(eval_gettext "Cannot store \$stash_sha1")"
                        gettext 'Applying autostash resulted in conflicts.
 Your changes are safe in the stash.
 You can run "git stash pop" or "git stash drop" it at any time.

commit 2e6e276decde2a9f04fc29bce734a49d3ba8f484
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Fri Jun 14 18:47:52 2013 +0530

    rebase: use peel_committish() where appropriate

    The revisions specified on the command-line as <onto> and <upstream>
    arguments could be of the form :/quuxery; so, use peel_committish() to
    resolve them.  The failing tests in t/rebase and t/rebase-interactive
    now pass.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..6987b9b 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -434,7 +434,7 @@ then
                shift
                ;;
        esac
-       upstream=`git rev-parse --verify "${upstream_name}^0"` ||
+       upstream=$(peel_committish "${upstream_name}") ||
        die "$(eval_gettext "invalid upstream \$upstream_name")"
        upstream_arg="$upstream_name"
 else
@@ -470,7 +470,7 @@ case "$onto_name" in
        fi
        ;;
 *)
-       onto=$(git rev-parse --verify "${onto_name}^0") ||
+       onto=$(peel_committish "$onto_name") ||
        die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
        ;;
 esac

Tôi muốn có thể nhận được cùng một loại định dạng bằng giao diện web của GitHub (không phải dòng lệnh) và tôi muốn một liên kết để gửi cho người khác mà không cần mã.


So sánh Chế độ xem cung cấp cho bạn một cái gì đó gần với những gì bạn đang tìm kiếm, nhưng không may nó không dành cho một tệp riêng lẻ.

2
Nếu bạn yêu cầu tính năng cho nó, có thể nhóm nhà phát triển GitHub sẽ thêm nó vào.

Câu trả lời:


83

URL sau sẽ hiển thị tất cả các cam kết cho một tệp ở định dạng tương tự như git log -p:

http://github.com/<username>/<project>/commits/<branch>/<path/to/file>

...Ở đâu:

  • <username> là tên người dùng của người sở hữu repo
  • <project> là tên repo
  • <branch> có thể là 'master' hoặc bất kỳ nhánh nào khác
  • <path/to/file> hy vọng là tự giải thích

Chọn (hơi) ngẫu nhiên, đây là một ví dụ từ kho vim-fugitive .


+1. Thêm các API cam kết đó: Develop.github.com/p/commits.html (trong phần API GitHub Develop.github.com )
VonC

17
Đó là đường dẫn git log / to / file. Tôi muốn git log -p path / to / file.
ma11hew28

1
Tất cả những gì làm là hiển thị bản cập nhật mới nhất, không phải lịch sử các bản cập nhật.
Gerry

4
Tôi không biết tại sao điều này lại được bình chọn. Tôi đoán mọi người không đọc kỹ câu hỏi. Câu trả lời này không cung cấp cho bạn danh sách các điểm khác biệt giống như git log --patch -- path/to/filenhững gì OP yêu cầu.
jcoffland

1
@jcoffland nó đang được ủng hộ vì hầu hết những người như tôi thấy điều này hữu ích và đây chính xác là những gì chúng tôi đang tìm kiếm, mặc dù bỏ qua câu hỏi của op.
mr5

49

Dựa trên các câu trả lời ở trên và nỗ lực của riêng tôi để tìm ra tính năng chính xác này, có vẻ như câu trả lời chính xác cho câu hỏi này là không .

Chỉnh sửa: trước khi bạn bỏ phiếu, có thể thử và chứng minh tôi sai. Đôi khi câu trả lời chính xác không phải là điều bạn muốn nghe.


1
Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của chính mình và khi bạn có đủ uy tín, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào .
indubitablee

18
Câu trả lời này vừa cụ thể vừa chính xác, không giống như hai câu trả lời khác thậm chí không xác nhận được câu hỏi đang hỏi.
jhk

5
Đây là câu trả lời chính xác. Github không có một cách để hiển thị kết quả vá cùng với các bản ghi cho một tập tin duy nhất đường git log -p - tập tin không
nohat

4
2 câu trả lời còn lại không chính xác. câu trả lời này đã giúp tôi tiết kiệm thời gian và sự thất vọng.
Schien

3
"Điều này không cung cấp câu trả lời cho câu hỏi." Chắc chắn là có, và một trong đó đã giúp tôi tiết kiệm thời gian. Cảm ơn jhk.
ChrisJJ

34

Một giải pháp thay thế cho câu trả lời URL trực tiếp (mà BTW hoàn toàn đúng) bằng cách sử dụng giao diện của GitHub là:

  • Nhấp vào chế độ xem 'Nguồn'
  • Chuyển sang một nhánh mong muốn
  • Tìm kiếm tệp bạn muốn cho đến khi bạn chuyển đến chế độ xem nguồn thực cho tệp
  • Nhấp vào 'lịch sử' ở góc trên cùng bên phải

12
Điều này cũng không thực sự cung cấp những gì người đăng ban đầu đang tìm kiếm. Anh ấy muốn đầu ra bản vá, giống như những gì anh ấy sẽ nhận được git log -p -- file. Những gì bạn đã hiển thị chỉ là nhật ký cho một tệp cụ thể, chẳng hạn như git log -- file, không có các bản vá lỗi khác.

-3

Nếu bạn đang sử dụng Linux, thì hãy cài đặt TIG bằng:

sudo apt-get install tig

và sau đó,

đường dẫn tig / đến / tệp /

Nó sẽ hiển thị cho bạn tất cả các cam kết và các thay đổi tương ứng của họ

Talat Parwez

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.