Làm cách nào để điều hướng đến cam kết sớm nhất trong kho Github?


151

Trong GitHub, có cách nào dễ dàng để điều hướng đến cam kết sớm nhất của một dự án nguồn mở lớn không?

Dự án có hơn 13.000 cam kết tính đến ngày hôm nay. Tôi không muốn phải nhấn nút "Cũ hơn" trên trang lịch sử cam kết hàng trăm và hàng trăm lần để có được cam kết ban đầu (hoặc cam kết đầu tiên).


2
Thay vào đó, bạn đã xem xét nhân bản kho lưu trữ để điều hướng nó cục bộ chưa?
jub0bs


Thông tin chi tiết / Người đóng góp hiển thị đầy đủ các cam kết cho chi nhánh chính.
ToolmakerSteve

Câu trả lời:


101

Nhân bản kho lưu trữ, mở bằng dòng lệnh và chạy $ git log --reverse

Điều này sẽ hiển thị các cam kết theo thứ tự ngược lại.

Sau đó, bạn có thể xem nó trên github khi bạn có ID (Tên đối tượng) của lần xác nhận đầu tiên ... đại loại như ... https://github.com/UserName/Repo/commit/6a5ace7b941120db5d2d50af6321770ddad4779e


15
Tôi không thể tin được bao nhiêu kỳ lạ, quá phức tạp tôi đã phải sàng lọc để tìm một câu trả lời đơn giản, hợp lý. Cảm ơn.
Sammitch

7
Một điều chỉnh, tôi sẽ thêm đối số onelinevào đây - git log --reverse --onelineđể bạn có thể xem nó dưới dạng danh sách
rynmrtn

Và nếu bạn đang sử dụng dấu nhắc lệnh của Windows và muốn tránh bị hút vào Vim (?), Hãy sử dụng git log --reverse --oneline | more. moreHành vi tiêu chuẩn , Ctrl + C để thoát.
Sinjai

81

Không có giao diện người dùng rõ ràng để làm điều này, nhưng có một cách để xây dựng đúng URL để đi đến trang một trong nhật ký cam kết.

Giả sử chúng ta muốn tìm cam kết đầu tiên của kho lưu trữ dotnet / coreclr . Trước tiên hãy ghi lại số lần xác nhận trong kho lưu trữ: hiện tại là 16.634. Bây giờ hãy vào danh sách các xác nhận và nhấp vào "Cũ hơn" một lần . URL sẽ giống như thế này:https://github.com/dotnet/coreclr/commits/master?after=872095a758a3a6191a9798c94a98e8d1e16b2254+34

Chú ý +34một phần. Đó là bao nhiêu cam kết được bỏ qua. Thay đổi thành 16.634 trừ 1 trừ 35 mỗi trang, cung cấp cho chúng tôi URL này , đưa bạn đến ngay trang đầu tiên của lịch sử cam kết coreclr.


4
Thật tuyệt, tôi đã tạo một bookmarklet để làm điều này. github.com/bpceee/oldest
bpceee

Đây là câu trả lời tốt để xem cam kết ban đầu trong danh sách cam kết dự án.
COil

Haha đây là cách nhanh hơn so với cách được đề xuất trong câu trả lời được chấp nhận ;-)
aderchox

46

Tháng 2 năm 2015: Trong GitHub , có cách nào dễ dàng để điều hướng đến cam kết sớm nhất của một dự án nguồn mở lớn không?

Vâng, bây giờ là có! (Ý nghĩa: không nhân bản repo và áp dụng git logtrong bản sao địa phương)

Kể từ tháng 1 năm 2017, bạn đã " Điều hướng lịch sử tệp nhanh hơn với chế độ xem đổ lỗi được cải thiện " trên GitHub.

Cho dù bạn đang gỡ lỗi hồi quy hoặc cố gắng hiểu làm thế nào một số mã có hình dạng hiện tại, bạn sẽ thường muốn xem một tệp trông như thế nào trước một thay đổi cụ thể.
Với chế độ xem đổ lỗi được cải thiện, bạn có thể dễ dàng xem bất kỳ phần nào trong tệp của mình đã phát triển theo thời gian mà không cần xem toàn bộ lịch sử của tệp .

Đây là bản demo quay lại bản cam kết cũ nhất của chính repo git / git (47K + cam kết) ... trong ba lần nhấp!

bản demo git / git

Mẹo ở đây là chọn một tệp có khả năng được tìm thấy trong lần xác nhận đầu tiên (hoặc rất sớm), như a README.md.


8
Điều này thường hoạt động, nhưng nó giả định rằng bạn biết tập tin nào tồn tại khi repo được tạo và bạn có thể tìm thấy các dòng không thay đổi nhiều lần kể từ khi thành lập.
Wilfred Hughes

1
@WilfredHughes Tôi đã sử dụng phương pháp này cho Go để quay lại 32.986 lần cam kết với cam kết đầu tiên xảy ra là một quả trứng Phục sinh vui vẻ. Trong trường hợp này, readme đã không quay trở lại cho đến khi bắt đầu, vì vậy tôi đã lặp lại quá trình bằng cách nhấn Browse filesvà mở lỗi cho một tệp khác.
andrewarchi

@andrewarchi Hoàn thành tốt. Trên thực tế, một số cam kết đầu tiên là trứng Phục sinh: stackoverflow.com/a/21981037/6309
VonC

Tôi sẽ coi đây là một "cách giải quyết" trong khi câu trả lời của @schmalzy trực tiếp hơn.
Jimmy Bosse

@JimmyBosse Nó không phải là một cách giải quyết. Đây là câu trả lời cho câu hỏi ban đầu. A git logchỉ hoạt động nếu bạn sao chép repo (có khả năng rất lớn) cục bộ. Nếu bạn muốn " điều hướng " đến cam kết nắm tay, thì đây chính là nó.
VonC

37

Tôi muốn thấy một trong những cam kết sớm nhất của dự án nodejs . Tôi đã làm như sau.

  1. Đã truy cập các trang web nodejs . Sau đó quan sát thấy rằng tổng số lần xác nhận là khoảng hai mươi ba nghìn (chính xác là 23652) tại thời điểm này.

nhập mô tả hình ảnh ở đây

  1. Tiếp theo tôi nhấp vào liên kết cam kết đó và điều đó đưa tôi đến https://github.com/nodejs/node/commits/master như hiển thị bên dưới.

nhập mô tả hình ảnh ở đây

  1. Bây giờ cuộn xuống phía dưới và tôi tìm thấy các nút Mới và Cũ hơn. Nút Newer bị vô hiệu hóa. Tôi đã nhấp vào nút cũ hơn và nó đưa tôi đến https://github.com/nodejs/node/commits/master?after=de37ba34c5d6f3a2d18daf482f850be8fddb4621+34

  2. Bây giờ hãy quan sát rằng url có +34. Bây giờ tôi đã thay đổi thành 23000 (vì số lần xác nhận tôi đã quan sát là 23000). Vì vậy, url mới tôi đã thử là

https://github.com/nodejs/node/commits/master?after=de37ba34c5d6f3a2d18daf482f850be8fddb4621+23000

  1. Bây giờ tôi gần như ở đó. Với một vài lần lặp lại hoặc bằng cách nhấp vào nút cũ hơn, tôi đã đến nơi tôi muốn.

2
Đây có phải là một bản sao của câu trả lời 2 câu trả lời trên của bạn? stackoverflow.com/a/49647826
Edric

2
là câu trả lời trùng lặp, nhưng tôi thích những hình ảnh, nó làm cho nó hấp dẫn hơn.
chiến thắng_joiner

7

Bạn có thể điều hướng đến cam kết đầu tiên của kho lưu trữ GitHub bằng cách sử dụng bookmarklet init .

TRONG ĐÓ

Một bookmarklet để nhanh chóng đưa bạn đến cam kết đầu tiên của một repo.

Tổng quat

Có thể nhanh chóng điều hướng đến cam kết cũ nhất trong một repo là khá hữu ích. Đi trước và kéo bookmarklet (liên kết) vào thanh dấu trang của bạn và nhấp vào nó bất cứ khi nào bạn muốn đi đến cam kết đầu tiên của một repo.

Sử dụng

Chuyển đến bất kỳ trang đích cụ thể nào của người dùng (e.g. like the one you're on)và nhấp vào bookmarklet, trang này sẽ đưa bạn đến trang đầu tiên (cam kết ban đầu). Theo mặc định, nó theo dõi masterchi nhánh, nhưng nếu bạn thay đổi branchtrang đích, nó sẽ đi đến cam kết đầu tiên của chi nhánh đó.

Lấy từ README.md trên GitHub


Tuyên bố miễn trừ trách nhiệm : Tôi đã đóng góp một bản cập nhật Readme nhỏ cho init vài phút trước khi đăng câu trả lời này.


7

Bạn có thể truy cập trang cam kết đầu tiên với phần sau đây mà tôi giữ dưới dạng đoạn trích trong các công cụ phát triển của Chrome.

function githubFirstCommitsPage() {
  let el = document.querySelector('.repository-content');
  let base = el.querySelector('a[data-pjax]').href;
  let count = el.querySelector('.commits .num')
    .textContent
    .trim()
    .replace(/[^\d\.\-]/g, "");
  count = count-36;
  let sha = el.querySelector('.commit-tease-sha')
    .href
    .split('/');
  sha = sha[sha.length-1];
  window.location = `${base}?after=${sha}+${count}`;   
}

githubFirstCommitsPage();

1
Cảm ơn bạn! Tôi không biết bạn có thể lưu đoạn trích như vậy để bài đăng của bạn hữu ích trên hai chiều.
bmacnaughton

6

Bạn cần sử dụng git log --reverselệnh của git.

Điều này sẽ trả về lịch sử của các cam kết cho repo được chỉ định theo thứ tự ngược lại (cũ nhất đến mới nhất).

Sau đó, với sự trợ giúp của một số sedphép thuật, bạn có thể có một cái gì đó giống như ngày cam kết đầu tiên (đó là những gì tôi đã thấy tôi luôn cần cho bản thân mình).

git log --reverse | sed -n 3p

Cuối cùng, bạn cũng có thể muốn tự động hóa việc này (vì hầu như không nhàm chán khi gõ lệnh hoặc không thể nhớ được lệnh này), do đó, một kịch bản shell như thế này có thể được giải cứu.



0

Liên kết này cung cấp một cách UI để làm điều này trên GitHub. Tóm lược:

  1. Tab 'Thông tin chi tiết'

  2. Tab mạng (bên trái)

  3. Thay đổi + <-

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.