2010-11-17 27 views
80

Thỉnh thoảng tôi gặp sự cố này.Cách chuyển đổi một bản sao chỉ đọc git từ github sang một số chia nhỏ

Giả sử tôi đã làm theo để đọc mã nguồn của đường ray vì tôi đang gặp phải một số vấn đề.

git clone git://github.com/rails/rails.git 

Trong quá trình nghiên cứu, tôi đã thử nghiệm một điều gì đó và bây giờ tôi có một bản sửa lỗi tôi muốn nhóm cốt lõi của ray xem xét. Làm cách nào để đẩy các thay đổi của tôi vào phiên bản đường ray được chia hai nhánh.

Hãy nhớ khi tôi nhân bản vô tính, tôi đã không sao chép phiên bản chia hai phiên bản nhưng chỉ đọc.

Nó không phải là tôi trái ngược với forking. Nó chỉ là đôi khi tôi nghĩ rằng tôi chỉ cần đi để duyệt sau đó tôi muốn thêm một cái gì đó.

+0

Tôi muốn đăng ký và xem câu trả lời của tôi có phù hợp với bạn hay không hoặc bạn vẫn cần thêm thông tin. Nếu bạn cần giải thích thêm hoặc làm rõ, hãy cho tôi biết và tôi có thể cố gắng giúp bạn. Nếu không, bạn có thể muốn chấp nhận câu trả lời để cho biết câu hỏi đã được trả lời đầy đủ. –

Trả lời

1

Nó không quan trọng. Bạn có thể thêm một điều khiển từ xa khác, chỉ định repo không chia đôi của bạn, nếu bạn muốn. Đẩy các thay đổi của bạn vào đó.

+0

Làm cách nào để thêm một điều khiển từ xa khác. Lấy làm tiếc. newbie để git thế giới. –

+1

bạn có thể ngã ba sau và sau đó đẩy đến repo được chia đôi của bạn ... trong trường hợp bạn chưa chia tay. Việc chia nhánh giúp bạn "bản sao" của riêng mình trong kho lưu trữ mà bạn quan tâm. –

+0

hiện tại bạn chỉ có thể tạo một repo mới trên github. Thêm nó như là một điều khiển từ xa cho một trong những bạn nhân bản từ repo đường ray và đẩy đến mới của bạn chỉ. Tôi nghĩ rằng đây là những gì bạn đang sau. Không cần thiết. –

110

Khi bạn sao chép một repo, nó sẽ tự động thiết lập một điều khiển từ xa được gọi là origin đề cập đến repo mà bạn đã sao chép. Điều này bây giờ trỏ đến dự án Rails ngược dòng, nhưng những gì bạn cần là tạo ra ngã ba của riêng bạn mà bạn có thể đẩy tới, và sau đó thiết lập một điều khiển từ xa trỏ đến đó để bạn có thể đẩy nó.

Bước đầu tiên là nhấp vào nút "Fork" trên trang dự án GitHub thượng nguồn (hình ảnh từ GitHub instructions on forking):

GitHub fork button

Một khi bạn đã làm điều đó, tìm và sao chép URL cho rằng repo. Đảm bảo bạn sử dụng URL SSH, có quyền truy cập đọc và ghi. Nó phải giống như [email protected]:nadal/rails.git, giả sử tên người dùng của bạn là nadal.

Bây giờ bạn có thể tạo điều khiển từ xa, cho phép Git theo dõi một kho lưu trữ từ xa, kéo từ kho lưu trữ đó hoặc chuyển sang tùy thuộc vào quyền truy cập bạn có. Bạn có thể chọn thay thế origin bằng một trong số đó bạn sẽ đẩy tới (số người đã thiết lập), hoặc để origin trỏ tới thượng nguồn và thay vào đó tạo một điều khiển từ xa mới. Tôi sẽ chỉ cho bạn cách thực hiện thiết lập đầu tiên; thứ hai nên dễ tìm ra.

Để thay đổi origin để trỏ đến ngã ba của bạn trên GitHub, có thể bạn sẽ muốn giữ lại các chi nhánh thượng nguồn xung quanh đâu đó, vì vậy đổi tên nó để upstream:

git remote rename origin upstream 

Bây giờ, tạo một trỏ từ xa mới đến ngã ba của bạn:

git remote add -f origin [email protected]:nadal/rails.git 

Và bây giờ bạn sẽ có thể đẩy đến bàn ăn mới của bạn:

git push origin master 

Khi bạn hài lòng với những thay đổi bạn đã đẩy lên GitHub và muốn một người nào đó từ nhóm Rails xem xét, bạn có hai lựa chọn. Một là send a pull request bằng GitHub; xem tài liệu ở đó để biết cách thực hiện điều đó. Tuy nhiên, nếu bạn chỉ có một hoặc một vài bản vá nhỏ, nhóm Rails sẽ thích bạn create a Lighthouse ticket và đính kèm bản vá cho bạn; xem hướng dẫn trên contributing to Rails để biết thêm thông tin.

chỉnh sửa Đây là sơ đồ cho biết điều gì đang xảy ra. Những gì bạn đã làm chỉ đơn giản là sao chép repo đường ray ngược dòng; vì vậy bây giờ bạn có repo của riêng bạn trên máy tính của riêng mình, trong đó đề cập đến git://github.com/rails/rails.git như origin:

 
Github: git://github.com/rails/rails.git 
        ^
        | 
Remotes:   origin 
        | 
Your machine:  rails/ 

Dưới đây là những gì bạn nhận được nếu bạn chia hai và sau đó sao chép ngã ba của bạn:

 
Github: git://github.com/rails/rails.git <-- [email protected]:nadal/rails.git 
                 ^
                  | 
Remotes:            origin 
                  | 
Your machine:           rails/ 

Nếu bạn làm theo tôi hướng dẫn, dưới đây là những gì bạn sẽ nhận được:

 
Github: git://github.com/rails/rails.git <-- [email protected]:nadal/rails.git 
         ^        ^
         |         | 
Remotes:   upstream       origin 
         |         | 
Your machine:   \-------------------------------rails/ 

Cũng giống như phiên bản bạn nhận được bằng cách giả mạo, ngoại trừ việc bạn cũng có phiên bản upstream từ xa để bạn có thể theo dõi các thay đổi chính thức và hợp nhất chúng vào mã của bạn (nếu bạn đã tạo phiên bản chia đôi, có thể bạn sẽ muốn thêm cả từ xa upstream).

+0

Bạn có thể không thực sự muốn ngã ba, nếu như các poster ban đầu nói, đôi khi ông có thể muốn lưu một số công việc thay vì không có bất kỳ liên kết đến bản gốc. –

+1

@adymitruk Không, OP đã đề cập rằng đôi khi anh ta nhân bản các repo ngược dòng mà không bị nghẹt thở, nhưng sau đó muốn đóng góp lại sau đó. Ông đặc biệt đề cập rằng ông muốn đẩy những thay đổi của mình vào một phiên bản Rails được chia đôi. Anh không nói gì về việc muốn cứu công việc mà không có bất kỳ liên kết nào với bản gốc. –

+0

anh ta có thể muốn trở thành một người đóng góp cho dự án thực tế sau đó nếu anh ta không muốn ngã ba ... như không như vậy. –

0

Hoặc, nếu bạn không muốn ngã ba và tùy thuộc vào nhóm bảo trì, bạn có thể tạo và gửi bản vá cho họ. Thông thường, bạn sẽ làm cho repo của bạn có sẵn bằng cách giả mạo github như được giải thích trong các bình luận khác, hoặc trên repo git của riêng bạn và cung cấp cho người duy trì repo gốc với thông tin về repo và chi nhánh của bạn mà bạn muốn họ hợp nhất.

+1

Tôi không hiểu tại sao người ta không muốn bị nghẹt thở, vì nó chỉ là một cái nĩa đơn giản! Nó không phải là một phiên bản hoàn toàn mới của dự án - chỉ là bản sao của mã nguồn mà bạn hy vọng được hợp nhất. Giống như một loạt bản vá. – alternative

+1

Có thể người đó không có tài khoản Github nhưng vẫn muốn đóng góp cho dự án. Họ có thể sao chép dự án, chỉnh sửa và gửi bản vá hoặc chi nhánh của họ cho dự án ban đầu để đưa vào. Nhưng đúng là không có lý do _real_ không để ngã ba nếu bạn có thể. – Svenito

3

Cách rất dễ dàng để chuyển từ chế độ nhân bản sang chế độ chia đôi là sử dụng trình bao bọc hub từ http://hub.github.com/.

Khi điều này được cài đặt, chỉ cần chạy

hub fork 

từ bên trong bản sao chỉ đọc của bạn.

+0

Hoạt động tốt. Các ngã ba sẽ được tạo ra với cùng một tên từ xa như tên người dùng github của bạn. – Zitrax

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