Làm cách nào để tôi đóng góp vào mã của người khác trong GitHub? [đóng cửa]


231

Tôi muốn đóng góp cho một dự án nào đó trong GitHub . Tôi có nên ngã ba không? Chi nhánh nào? Những gì được đề nghị và làm thế nào để làm điều đó?


61
Một thân lố bịch
stephen

4
Tôi đã viết hướng dẫn từng bước chi tiết hơn về việc đóng góp cho Concrete5 trên Github, nhưng quy trình có thể áp dụng cho bất kỳ dự án nào. Kiểm tra nó ra .
Joe Meyer

7
Tôi thực sự không thấy làm thế nào điều này là 'không mang tính xây dựng'. Chỉ riêng phiếu bầu và lượt xem cung cấp bằng chứng rằng đó là một câu hỏi phổ biến mà mọi người đang tìm cách trả lời.
Ian


1
có lẽ với việc bỏ phiếu đa số, một câu hỏi đã đóng trước đó sẽ được cho phép được hồi sinh lại và để mọi người đóng góp lại cho chủ đề.
Peter Teoh

Câu trả lời:


180

Lý tưởng nhất là bạn:

  1. Ngã ba dự án
  2. Thực hiện một hoặc nhiều nhận xét tốt và cam kết sạch với kho lưu trữ. Bạn có thể tạo một chi nhánh mới ở đây nếu bạn đang sửa đổi nhiều hơn một phần hoặc tính năng.
  3. Thực hiện yêu cầu kéo trong giao diện web của github.

nếu đó là một yêu cầu Tính năng mới, trước tiên đừng bắt đầu mã hóa. Hãy nhớ đăng một vấn đề để thảo luận về tính năng mới.

Nếu tính năng này được thảo luận tốt và có một số +1 hoặc chủ dự án đã phê duyệt nó, hãy chỉ định vấn đề cho chính bạn, sau đó thực hiện các bước trên.

Một số dự án sẽ không sử dụng hệ thống yêu cầu kéo. Kiểm tra với tác giả hoặc danh sách gửi thư về cách tốt nhất để đưa mã của bạn trở lại dự án.


4
Thông tin chi tiết trên GitHub của forking , và kéo yêu cầu
Gabriel Grant

1
Có, kéo yêu cầu. Yêu cầu hợp nhất là thuật ngữ chính.
Yann Ramin

2
@MariusKavansky là cách khác! Khi bạn biết phải làm gì, chỉ có bạn đóng góp :)
băm

sau khi tôi đóng góp cho một số dự án nguồn mở. Tôi nghĩ rằng đó là một ý tưởng tốt hơn để mở ra một vấn đề để thảo luận về tính năng mới nếu đó là một tính năng mới. Nếu đó là một tính năng hoặc vấn đề được thảo luận kỹ, bạn nên chỉ định vấn đề cho chính mình sau đó thực hiện các bước trên. Đây là 2cents của tôi.
wizztjh

@hashbrown, Anh ấy hỏi "danh sách" các tính năng được yêu cầu cho đến nay. Những tính năng đã được yêu cầu và +1.
Pacerier

31

Để thêm vào câu trả lời của Yann , một khi bạn đã rẽ nhánh một dự án, bạn có thể phát triển ở bất kỳ chi nhánh nào bạn muốn (một dự án mới hoặc một từ dự án ban đầu)

Ghi nhớ:


1
bạn có thể thêm chi tiết hoặc liên kết vào điểm thứ hai của bạn (nhánh nổi loạn) không?
JorgeArtware

1
@JorgeArtware Tôi đã cập nhật câu trả lời với một vài liên kết minh họa cho rebase.
VonC

@VonC Tôi hỏi một câu hỏi ở đây nhưng nếu bạn tin rằng nó là cần thiết, tôi sẽ đưa ra một câu hỏi hoàn toàn mới từ nó. Tại sao tôi lại nổi loạn thay vì hợp nhất, ngoài việc có 'lịch sử thẳng'? Nói cách khác, đây là những gì tôi làm khi tôi đóng góp cho một số dự án (sau khi PR từ nhánh tính năng của tôi được hợp nhất để phát triển và làm chủ các nhánh): git checkout master; git pull;tương tự cho phát triển (nơi nhánh tính năng của tôi được sáp nhập trước) Sự khác biệt tôi có thể nghĩ của, sau khi đọc "pull vs pull --rebase" và "merge vs rebase" chỉ là lịch sử phẳng. Còn gì sâu hơn nữa không?
linuxbandit

@grasshopper về mặt "đóng góp" (bối cảnh của trang này), bạn luôn muốn phản hồi lại các cam kết cục bộ của mình trên đầu các nhánh được cập nhật trước khi đẩy: điều đó sẽ khiến đóng góp không đáng kể để tích hợp bởi người duy trì vào nhánh dự án ban đầu. Trong bối cảnh câu hỏi của bạn, nơi PR của bạn đã được chấp nhận, chắc chắn, bạn có thể hợp nhất thay vì rebase để cập nhật các chi nhánh hiện có.
VonC

. Để phản ánh PR được chấp nhận và sáp nhập trong repo địa phương của tôi, có bất kỳ thông lệ chung nào (rebase thay vì hợp nhất), hoặc tôi có thể làm gì không? Nếu tôi sẽ gửi một PR khác thì sao?
linuxbandit

15

Để thêm vào câu trả lời của Yan và VonC, đây là một tài nguyên tốt từ chính github: http://help.github.com/forking/

Ngoài ra hãy chắc chắn nhìn vào thanh bên phải dưới tiêu đề "cộng tác".


10

Có một video Railscast tuyệt vời ở đây hướng dẫn bạn qua quy trình. Nó cũng có một số mẹo hay như chỉ ra cách xác định nhánh nào bạn có thể muốn làm việc khi đóng góp, sử dụng các bài kiểm tra, mô hình con, v.v.

Mặc dù screencast này chủ yếu tập trung vào các nhà phát triển Rails, hầu hết các thông tin đều có giá trị để đóng góp cho bất kỳ dự án nguồn mở nào.


4

Github có nhiều cách hợp tác với một dự án. Mô hình sử dụng nhiều nhất dự án là một mô hình yêu cầu kéo. Tôi đã bắt đầu một dự án để giúp mọi người thực hiện yêu cầu kéo GitHub đầu tiên của họ. Bạn có thể thực hiện hướng dẫn thực hành để thực hiện PR đầu tiên của mình tại đây

Quy trình làm việc đơn giản như

  • Ngã ba repo trong github
  • Sao chép repo vào máy của bạn
  • Tạo một chi nhánh và thực hiện các thay đổi cần thiết
  • Đẩy các thay đổi của bạn lên ngã ba của bạn trên GitHub git push origin branch-name
  • Đi đến ngã ba của bạn trên GitHub để xem Compare and pull requestnút
  • Click vào nó và cung cấp chi tiết cần thiết


2

Quy trình kỹ thuật

Tôi muốn đề xuất quy trình làm việc sau đây:

  1. Ngã ba kho lưu trữ (thông qua giao diện web GitHub: nút "Fork")
  2. Trong kho lưu trữ của bạn, sao chép URL
  3. Bản sao (trong dòng lệnh)

    git clone <url-from-your-workspace>

  4. Nhập thư mục vừa tạo và tạo một nhánh

    cd <directory> git checkout -b <branchname>

  5. Bây giờ hãy thay đổi

  6. Bạn có thể tạo một hoặc nhiều cam kết sau mỗi thay đổi:

    commit -a

  7. Khi hoàn tất, hãy thay đổi

    git push origin <branch>

  8. Trong dòng lệnh của bạn, bạn sẽ thấy một URL để tạo PR . Truy cập URL và nhấp vào nút để tạo PR.

  9. Nếu không, hãy truy cập kho lưu trữ trong trình duyệt và nó sẽ cung cấp cho bạn một nút để tạo yêu cầu kéo

Đó là nó.

Vì vậy, về cơ bản, bạn đã rẽ nhánh kho lưu trữ vào không gian làm việc của mình, tạo một nhánh mới và đẩy nhánh mới đó.

Nếu sau này bạn thực hiện thêm PR từ cùng một repo nhân bản, bạn nên đồng bộ hóa (nhận các thay đổi mới nhất từ ​​kho lưu trữ ban đầu) trước khi bạn tạo một chi nhánh khác cho PR khác:

git checkout master
git remote add upstream <url-of-original-repo>
git pull upstream master

Những ý kiến ​​khác:

  • dự án có thể có Nguyên tắc đóng góp: Tìm kiếm tệp CONTRIBUTING.rst hoặc .md
  • bạn có thể muốn làm theo các hướng dẫn mã hóa cho dự án
  • bạn có thể muốn phác thảo ý tưởng của bạn như là vấn đề đầu tiên
  • bạn có thể muốn xem tab Yêu cầu kéo cho dự án và kiểm tra xem có PR mở, PR hợp nhất không

Những đề xuất này có ở đây để cứu bạn khỏi những rắc rối khi đưa công việc vào PR mà sẽ không được hợp nhất. Nếu có hoạt động trong dự án và PR được hợp nhất, đây là một dấu hiệu tốt. Nếu có Nguyên tắc đóng góp, hãy làm theo chúng.

Luôn luôn lịch sự. Hãy nhớ rằng, những người duy trì dự án không có nghĩa vụ phải hợp nhất PR của bạn. Bạn có một cái gì đó có giá trị để thêm vào dự án?


1
Quá trình chi tiết tốt (chính xác hơn câu trả lời 9 tuổi của tôi). Nâng cao.
VonC
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.