Làm thế nào để chuyển đổi một bản sao git chỉ đọc từ github thành một bản sao được chia nhỏ


79

Đôi khi tôi gặp phải vấn đề này.

Giả sử rằng tôi đã làm theo để đọc mã nguồn của rails vì tôi đang gặp 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 số thứ 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 rails xem xét. Làm cách nào để chuyển các thay đổi của tôi sang phiên bản đường ray được phân nhánh.

Hãy nhớ rằng khi tôi sao chép, tôi không sao chép một phiên bản đã được chia nhỏ mà là một phiên bản chỉ đọc.

Không phải là tôi phản đối việc rèn. Chỉ là đôi khi tôi nghĩ rằng tôi chỉ đang duyệt qua sau đó tôi muốn thêm một cái gì đó.


Tôi muốn kiểm tra và xem câu trả lời của tôi có phù hợp với bạn không hoặc nếu bạn vẫn cần thêm thông tin. Nếu bạn cần giải thích hoặc làm rõ thêm, 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 một câu trả lời để cho biết rằng câu hỏi đã được trả lời đầy đủ.
Brian Campbell,

Câu trả lời:


112

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à điều khiển originđề cập đến repo mà bạn đã sao chép . Điều này hiện đang trỏ đến dự án Rails ngược dòng, nhưng những gì bạn cần là tạo nhánh rẽ của riêng bạn mà bạn có thể đẩy đến, sau đó thiết lập một điều khiển từ xa trỏ đến đó để bạn có thể đẩy tới đó.

Bước đầu tiên là nhấp vào nút "Fork" trên trang dự án GitHub ngược dòng (hình ảnh từ hướng dẫn GitHub về fork ):

Nút ngã ba GitHub

Khi bạn đã hoàn thành việc đó, hãy tìm và sao chép URL cho repo đó. Đảm bảo bạn sử dụng URL SSH, có quyền đọc và ghi. Nó phải là một cái gì đó giống như git@github.com:nadal/rails.git, giả sử tên người dùng của bạn nadal.

Giờ đây, bạn có thể tạo điều khiển từ xa, điều này cho phép Git theo dõi kho lưu trữ từ xa, kéo hoặc đẩy đến kho lưu trữ đó tùy thuộc vào quyền truy cập bạn có. Bạn có thể chọn thay thế originbằng cái mà bạn sẽ đẩy đến (đó là số người đã thiết lập nó) hoặc để lại origintrỏ đến ngược dòng và thay vào đó tạo một điều khiển từ xa mới. Tôi sẽ chỉ 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 nhánh rẽ của bạn trên GitHub, có thể bạn sẽ muốn giữ nhánh ngược dòng ở đâu đó, vì vậy hãy đổi tên nó thành upstream:

git remote rename origin upstream

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

git remote add -f origin git@github.com:nadal/rails.git

Và bây giờ bạn sẽ có thể đẩy sang ngã ba mới của mình:

git push origin master

Khi bạn hài lòng với những thay đổi mà bạn đã đưa lên GitHub và muốn ai đó từ nhóm Rails xem xét nó, bạn có hai lựa chọn. Một là gửi một yêu cầu kéo 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 muốn bạn tạo một vé Lighthouse và đính kèm bản vá cho bạn; xem hướng dẫn về cách đóng góp vào Rails để biết thêm thông tin.

chỉnh sửa Đây là một sơ đồ để chỉ ra những 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 của riêng bạn, được gọi git://github.com/rails/rails.gitorigin:

Github: git: //github.com/rails/rails.git
                    ^
                    |
Điều khiển từ xa: nguồn gốc
                    |
Máy của bạn: rails /

Đây là những gì bạn nhận được nếu bạn fork và sau đó sao chép fork của mình:

Github: git: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                                                           ^
                                                           |
Điều khiển từ xa: nguồn gốc
                                                           |
Máy của bạn: rails /

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

Github: git: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                        ^ ^
                        | |
Điều khiển từ xa: nguồn gốc ngược dòng
                        | |
Máy của bạn: \ ------------------------------- rails /

Nó giống như phiên bản mà bạn nhận được bằng cách fork, ngoại trừ việc nó cũng có một upstreamđiều khiển 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 mình (nếu bạn đã tạo phiên bản fork, có thể bạn sẽ muốn thêm upstreamđiều khiển từ xa như tốt).


Bạn có thể không thực sự muốn fork, nếu như người đăng ban đầu nói, đôi khi anh ta có thể muốn lưu một số tác phẩm thay thế mà không có bất kỳ liên kết nào với bản gốc.
Adam Dymitruk

1
@adymitruk Không, OP đã đề cập rằng đôi khi anh ấy sao chép repo ngược dòng mà không cần fork, nhưng sau đó muốn đóng góp lại sau đó. Anh ấy đặc biệt đề cập rằng anh ấy muốn đẩy những thay đổi của mình lên một phiên bản Rails được phân nhánh. Anh ấy không nói gì về việc muốn lưu tác phẩm mà không có bất kỳ liên kết nào với bản gốc.
Brian Campbell

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 fork ... điều đó khó xảy ra.
Adam Dymitruk

Cảm ơn câu trả lời và xin lỗi vì sự chậm trễ của tôi. Như tôi đã đề cập, tôi không ngã ba đường ray. Tôi chỉ có một bản sao của đường ray. Tuy nhiên câu trả lời của bạn giả định rằng tôi đã tách đường ray trước. Tôi đã hiểu đúng?
Nick Vanderbilt

4
@Nadal Câu trả lời của tôi không giả định rằng bạn đã tạo một ngã ba. Câu trả lời của tôi giải thích cách chuyển đổi một tình huống mà bạn vừa sao chép một repo, thành một tình huống mà bạn có thể đẩy những thay đổi của mình từ repo cục bộ thành một fork. Việc tạo một repo trên GitHub chỉ tạo một bản sao trên máy chủ mà bạn có thể đẩy đến; khi bạn đã hoàn thành việc đó, hướng dẫn của tôi chỉ cho bạn cách trỏ repo cục bộ mà bạn đã tạo, ngay bây giờ trỏ đến repo đường ray chính thức, thay vào đó trỏ đến fork của bạn. Tôi đã thêm một sơ đồ để chỉ ra những gì đang xảy ra; Tôi hy vọng điều đó sẽ hữu ích, hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào khác.
Brian Campbell

3

Một cách rất dễ dàng để chuyển từ chế độ sao chép sang chế độ chia nhỏ là sử dụng hubtrình bao bọc từ http://hub.github.com/ .

Khi cái 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.


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

1

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


Làm cách nào để thêm một điều khiển từ xa. Lấy làm tiếc. người mới đến thế giới git.
Nick Vanderbilt

1
bạn có thể fork sau và sau đó đẩy đến repo đã fork của mình ... trong trường hợp bạn chưa fork. Forking làm cho bạn của riêng bạn "bản sao" của các kho lưu trữ bạn trong đang quan tâm.
Adam Dymitruk

bây giờ bạn chỉ có thể tạo một repo mới trên github. Thêm nó làm điều khiển từ xa cho cái bạn đã sao chép từ repo rails và chỉ chuyển sang cái mới của bạn. Tôi nghĩ đây là những gì bạn đang theo đuổi. Không cần thiết.
Adam Dymitruk

1
git remote thêm myrepo git: //github.com/myid/mynotforkedrepo.git
Adam Dymitruk

bạn đã tạo cho mình một repo trên github (hoặc nơi khác) chưa?
Adam Dymitruk

0

Hoặc, nếu bạn không muốn fork 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ọ. Nói chung, mặc dù bạn sẽ cung cấp repo của mình bằng cách fork trên github như được giải thích trong các nhận xét khác hoặc trên git repo của riêng bạn và cung cấp cho những người duy trì repo gốc thông tin về repo và chi nhánh của bạn mà bạn muốn họ hợp nhất vào.


1
Tôi không hiểu tại sao người ta lại không muốn fork, 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 mã nguồn của bạn mà bạn hy vọng sẽ được hợp nhất vào. Giống như một loạt bản vá.
thay thế

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 các bản vá hoặc nhánh của họ cho dự án gốc để đưa vào. Nhưng đúng là không có lý do thực sự nào để không fork nếu bạn có thể.
Svenito
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.