2012-01-17 28 views
21

Tôi đang sử dụng plugin NSDate-Extensions trong dự án Xcode iOS của mình. Repo tổng thể có một số lỗi mà dường như được cố định trong hai yêu cầu Pull:GitHub: Cách thêm yêu cầu kéo mở vào repo cục bộ?

Các yêu cầu này vẫn còn mở và không được chấp nhận để các repo chủ. Làm thế nào tôi có thể thêm chúng vào repo địa phương của tôi theo cách Git? Nó sẽ là tốt, nếu repo địa phương của tôi được cập nhật, nếu Fork của họ được cập nhật sau:

+0

bản sao có thể có của [Kéo yêu cầu từ các nhánh khác vào ngã ba của tôi] (http://stackoverflow.com/questions/6022302/pull-requests-from-other-forks-into-my-fork) – CharlesB

+0

bản sao có thể có của [ git: làm thế nào tôi có thể lấy một yêu cầu kéo unmerged cho một chi nhánh tôi không sở hữu?] (http://stackoverflow.com/questions/6743514/git-how-can-i-fetch-an-unmerged-pull-request -for-a-branch-i-dont-own) –

Trả lời

16

Thêm một .patch đến cuối url kéo - bạn có thể tải về và áp dụng các miếng vá trên repo của bạn:

curl https://github.com/erica/NSDate-Extensions/pull/6.patch | git am 
+0

'git am' đang làm gì? – dhrm

+0

'git am' áp dụng tập tin bản vá được thực hiện bởi lệnh' curl'. –

+0

Sau khi tôi đã thực hiện lệnh trên, bản vá được áp dụng thành công, nhưng khi tôi chạy một trạng thái 'git', nó nói rằng không có bất kỳ thay đổi nào. Tại sao miếng vá này có thể thay đổi repo địa phương của tôi và vẫn nói rằng không có bất kỳ thay đổi nào? – dhrm

12

Bạn nên thêm các nhánh cung cấp yêu cầu kéo và thêm chúng làm điều khiển từ xa:

  • Tìm người góp phần liên kết (thường là chỉ cần nhấp vào băm SHA1)

  • Đừng cái gì đó như:

    git remote add githubuser theirgithubfork.git

Sau đó, bạn có thể dễ dàng kéo xuống thay đổi của họ:

  • git fetch githubuser

Dễ dàng đưa các cam kết cá nhân với"

  • git cherry-pick thesha1fromthepullrequest

Đối với một ví dụ hoàn chỉnh, hãy tưởng tượng this pull request (6bbbcc5) from RogerE on the Ruby Capistrano project.

$ git clone [email protected]:capistrano/capistrano.git 
$ cd capistrano 
$ git remote add RogerE https://github.com/RogerE/capistrano.git 
$ git fetch RogerE 
$ git cherry-pick 6bbbcc5
+0

Vì vậy, tôi nên sao chép bản gốc repo từ erica, và chạy "git remote add" cho cả hai nhánh của Ricardo1980 và cao quý? Điều gì xảy ra nếu tôi sau đó thực hiện một "git pull", nó sẽ kéo từ repo ban đầu - hoặc sẽ cập nhật từ hai điều khiển từ xa cũng bị kéo? – dhrm

+0

Tại sao cả hai bạn thực hiện tìm nạp và sau đó là lựa chọn anh đào? Sẽ không phải là lấy tất cả kéo xuống từ xa? – dhrm

+0

'git pull' sẽ lấy từ repo gốc. Bạn có thể chỉ định repo nào cần lấy từ bằng cách chỉ định tên từ xa và refspec. ví dụ. 'git pull RogerE master'. –

-2

Bạn có thể kéo các yêu cầu cụ thể kéo như thế này:

git pull https://github.com/erica/NSDate-Extensions/pull/6 
git pull https://github.com/erica/NSDate-Extensions/pull/7 

imo này là dễ dàng hơn nhiều so với việc thêm một điều khiển từ xa (đặc biệt là khi nó chỉ là một lần sửa chữa) hoặc đường ống qua curl.

+0

Ý tưởng là chính xác, nhưng nó không hoạt động như thế, đó có thể là lý do cho downvote. Tôi đã thêm một câu trả lời làm việc với cùng một ý tưởng tại http://stackoverflow.com/a/18096344/1904815) – JonnyJD

14

Bạn có thể kéo các yêu cầu từ dòng lệnh mà không cần điều khiển từ xa thêm:

git pull https://github.com/erica/NSDate-Extensions +refs/pull/6/head 

Nếu bạn chưa chắc chắn rằng bạn muốn làm điều đó, thì bạn có thể muốn kiểm tra chi nhánh đầu tiên với:

git fetch https://github.com/erica/NSDate-Extensions +refs/pull/6/head:refs/origin/pull/6 

Lợi thế của việc này so với việc sử dụng tệp vá là git nhận được cam kết thực tế. Vì vậy, git có thể nhìn thấy khi tổng thể trước đó đã được hợp nhất vào yêu cầu kéo.Các tập tin vá lỗi hoàn toàn không biết về sự khác biệt như vậy.

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