2012-05-14 38 views
21

Bất kể dự án nào, tôi muốn biết liệu có cách nào dễ dàng nhận tất cả các cam kết cho tất cả các kho lưu trữ công khai cho một tên người dùng không.Cách nhận tất cả các github công khai của người dùng cam kết

Vì tôi thuộc nhiều tổ chức, tôi đang cố gắng biên soạn danh sách các dự án mà tôi là cộng tác viên, cũng như các dự án mà tôi đã chấp nhận yêu cầu kéo.

Cho đến nay, google-fu của tôi và tìm kiếm tài liệu api github đã chứng minh là không đủ.

Trả lời

16

http://zmoazeni.github.com/gitspective/ là bạn của bạn. :-) Lọc ra tất cả nhưng "Đẩy", và bạn có quan điểm của bạn, mặc dù không có các công việc mã hóa để thực hiện nó cho mình đầu tiên.

Kiểm tra xem điều gì xảy ra với tab "Mạng" của Chrome Devtools có thể giúp bạn bắt chước các truy vấn API, nếu bạn muốn tự làm lại công việc.

+5

Đây không phải là cho tất cả ** đóng góp **. Nó chỉ hiển thị tất cả năm nay cho tôi, không phải kể từ năm 2011. –

1

Tôi biết câu hỏi này khá cũ, nhưng tôi đã kết thúc việc viết giải pháp của riêng mình cho vấn đề này.

Cuối cùng, giải pháp là tìm tất cả các kho lưu trữ tiềm năng mà người dùng đã đóng góp bằng các dịch vụ organization_repositorieslist_repositories (Tôi đang sử dụng octokit).

Sau đó, chúng tôi tìm thấy tất cả các chi nhánh hoạt động (dịch vụ branches) trên các kho này và cho mỗi người trong số họ chỉ tìm thấy các cam kết từ người dùng của chúng tôi (dịch vụ commits).

Các mẫu mã là một chút mở rộng, nhưng có thể được tìm thấy here

OBS: As pointed out, this solution does not consider organizations and repositories where you contributed but are not part of. 
+0

điều này chỉ hiển thị các cam kết để repos mà tổ chức của bạn là một phần của cộng với repos của bạn. nó không hiển thị mã nguồn mở repos cho các tổ chức mà bạn không phải là một phần của, nhưng bạn đã cam kết. – user1130176

+0

Điểm tốt. Tôi đã chỉnh sửa để nó vẫn rõ ràng trong câu trả lời. –

9

Các cách chính xác để làm điều này là thông qua Events API.

Trước tiên, bạn cần phải fetch the user's events:

GET /users/:username/events 

Sau đó, bạn sẽ muốn lọc mảng đáp ứng cho các hạng mục where type is set to PushEvent. Mỗi một trong số các mục này tương ứng với một người dùng git push. Các cam kết từ đẩy đó có sẵn theo thứ tự thời gian đảo ngược trong mảng payload.commits.

Bước tiếp theo là lọc các cam kết của người dùng khác bằng cách kiểm tra thuộc tính author.email của từng đối tượng cam kết. Bạn cũng có quyền truy cập vào các thuộc tính như sha, messageurl trên cùng một đối tượng và bạn có thể loại bỏ các cam kết trùng lặp trên nhiều lần đẩy bằng cách sử dụng thuộc tính distinct.

CHỈNH SỬA: Như được chỉ ra bởi Adam Taylor trong nhận xét, phương pháp này là sai. Tôi thất bại với RTFM, xin lỗi. API cho phép bạn tìm nạp tối đa 300 sự kiện và sự kiện cũng được giới hạn trong 90 ngày qua. Tôi sẽ để lại câu trả lời ở đây cho đầy đủ nhưng đối với câu hỏi được nêu rõ về việc tìm nạp tất cả các cam kết, nó sẽ không hoạt động.

+0

Câu trả lời hay!Quá tệ, quá muộn hay không thì sẽ là đầu trang – theEpsilon

+1

Một số lưu ý quan trọng từ [trang này] (https://developer.github.com/v3/activity/events/): Sự kiện hỗ trợ [pagination] (https: // developer .github.com/v3/# pagination), tuy nhiên tùy chọn 'per_page' không được hỗ trợ. Kích thước trang cố định là 30 mục. Tìm kiếm tối đa mười trang được hỗ trợ, với tổng số 300 sự kiện. Chỉ các sự kiện được tạo trong vòng 90 ngày qua mới được đưa vào mốc thời gian. Các sự kiện cũ hơn 90 ngày sẽ không được bao gồm (ngay cả khi tổng số sự kiện trong dòng thời gian dưới 300). –

+0

Hoạt động tuyệt vời cho nhu cầu của tôi ... cảm ơn bạn !!! –

Các vấn đề liên quan