Forking Git repository từ GitHub sang GitLab


95

Giả sử rằng tôi muốn thực hiện một bản sửa lỗi cho một dự án của người khác. Dự án đó nằm trên GitHub.

Tôi có thể tạo một fork trên GitHub và thực hiện bản sửa lỗi.

Tuy nhiên, tôi muốn tạo fork của mình trên GitLab hơn là trên GitHub.

Điều đó có thể không? Làm sao?

Tôi đã đọc bài viết này: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

Dù sao, tôi không chắc mình nên làm gì trong trường hợp của mình.

  • Tôi có nên tạo một nhánh rẽ trên GitLab của dự án từ GitHub bằng cách nào đó không?
  • Hay tôi nên tạo một nhân bản trên GitLab của dự án từ GitHub?
  • Hay tôi nên tạo một gương trên GitLab và sau đó tách gương?
  • Hay tôi nên làm điều gì đó hoàn toàn khác?

Cách tiếp cận chính xác là gì.

Cảm ơn.

CẬP NHẬT

Phản chiếu kho lưu trữ trên GitLab có lẽ không hợp lý. Tôi có thể tạo bản sao của kho lưu trữ GitHub CỦA TÔI trên GitLab nhưng tôi không thể tạo bản sao của kho lưu trữ của người khác.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

Đây là những gì tôi đã làm cho đến nay:

Tôi đã sao chép dự án GitHub gốc vào máy cục bộ của mình. Tôi đã cam kết sửa chữa cho một nhánh mới trong kho lưu trữ cục bộ của mình. Tôi đã tạo một dự án trống trên GitLab. Tôi đã đặt nguồn gốc trong kho lưu trữ cục bộ của mình thành dự án trống đó trên GitLab và đẩy cả hai nhánh sang GitLab. Tôi đã đặt ngược dòng trong kho lưu trữ cục bộ của mình thành kho lưu trữ GitHub.

Khi tôi muốn nhận các cam kết mới từ kho lưu trữ GitHub ban đầu đến kho lưu trữ trên GitLab (tức là đồng bộ hóa các kho lưu trữ), tôi có thể thực hiện việc này bằng cách sử dụng kho lưu trữ cục bộ của mình như một bước trung gian. Tuy nhiên, không có kết nối trực tiếp giữa repo trên GitHub và repo trên GitLab. Thiết lập của tôi có đúng không? Có sự khác biệt nào nếu tôi thực hiện fork trên GitHub không?

Câu trả lời:


126

Nếu bạn chỉ muốn theo dõi các thay đổi, trước tiên hãy tạo một kho lưu trữ trống trong GitLab (hoặc bất kỳ thứ gì khác mà bạn có thể đang sử dụng) và sao chép nó vào máy tính của bạn.

Sau đó, thêm dự án GitHub làm điều khiển từ xa " ngược dòng " với:

git remote add upstream https://github.com/user/repo

Bây giờ bạn có thể tìm nạp và kéo từ ngược dòng nếu có bất kỳ thay đổi nào. (Bạn cũng có thể đẩy hoặc hợp nhất nó nếu bạn có quyền truy cập.)

git pull upstream master

Cuối cùng, quay lại kho lưu trữ GitLab của riêng bạn:

git push origin master

Nếu bạn không muốn kéo nguồn gốc ngược dòng / đẩy theo cách thủ công, GitLab cung cấp khả năng sao chép trong Cài đặt => Kho lưu trữ => Sao chép kho lưu trữ.


15
Tôi chỉ muốn bổ sung câu trả lời này về lý do tại sao đây là cách tiếp cận chính xác. "Forking" là một khái niệm được tạo ra bởi GitHub do đó chỉ tồn tại trên GitHub, dù sao thì cũng hữu ích. Nếu bạn coi bản thân là git thuần túy (giống như một máy chủ git thuần túy đang chạy ở đâu đó trong mạng của bạn), điều đó sẽ giống như sao chép repo vào máy chủ của riêng bạn và sau đó sao chép nó vào máy tính cục bộ của bạn. Khi đó, bạn sẽ thêm repo gốc làm bản ngược dòng cục bộ. Tôi tin rằng đó là những gì GitHub làm đằng sau hậu trường.
Bruno Finger

9
Chỉ muốn thêm rằng fork không tồn tại trên GitLab, hãy xem ví dụ ở đây .
bellackn

1
Tôi đã phải sử dụng: kéo ngược dòng chủ --allow-không liên quan-lịch sử
hmojtaba

Làm thế nào để bạn gửi một yêu cầu kéo sau đó?
Erik Aronesty

1
@ErikAronesty Điều đó phức tạp hơn vì "Yêu cầu kéo" không phải là một thứ git, mà là một thứ GitHub. Tuy nhiên, một cách để làm điều này là phân nhánh một bản sao trên GitHub và thêm repo đã phân nhánh của bạn dưới dạng một điều khiển từ xa khác git remote add upstream-fork git@github.com:myuser/repo. Sau đó, chỉ cần git push upstream-fork mastergửi yêu cầu kéo của bạn qua trang GitHub.
Chris Watts

18

Cách chỉ dành cho trình duyệt:

  1. Tạo một dự án mới trong Gitlab (Chỉ cần một dự án trống có tên là được)
  2. Đi tới Cài đặt -> Kho lưu trữ
  3. Nhập URL GitHub trong 'Kho lưu trữ sao chép'
  4. Đảm bảo 'Hướng gương' là 'Kéo'
  5. Nhấn nút 'Kho lưu trữ nhân bản'
  6. Nhấn vào biểu tượng đồng bộ hóa bên cạnh mục xuất hiện

Tôi không có giấy phép Phiên bản Doanh nghiệp, tức là tôi không thể nhìn thấy "Kho lưu trữ sao chép" từ bước 3. Dù sao, nếu tôi có giấy phép đó, tôi có thể tạo bản sao kho lưu trữ GitHub của người khác không?
Cimlman

1
@Cimlman Thật kỳ lạ, bởi vì tôi cũng có giấy phép miễn phí. Có thể kiểm tra lại? Nên đứng thứ ba trong 'Cài đặt-> Kho lưu trữ'. Chỉ cần rõ ràng: cài đặt trên thanh bên, không phải menu hồ sơ.
aksh1618

Sau khi nhấp vào Cài đặt -> Kho lưu trữ trên thanh bên, tôi có thể thấy các phần Các nhánh được bảo vệ, Thẻ được bảo vệ, Khóa triển khai, Mã thông báo triển khai.
Cimlman

2
@Cimlman Bạn có đang sử dụng phiên bản gitlab tùy chỉnh / cục bộ không? Tôi có nhiều lựa chọn hơn trong tài khoản cá nhân, cơ bản của tôi trên gitlab.com
aksh1618

1
Chúng tôi đang sử dụng cài đặt tự quản lý, phiên bản 10.7.2. Bản phát hành mới nhất là 11.6. OK, đây là một điểm tốt. :) Tôi không thể thử giải pháp của bạn trên GitLab của chúng tôi. Dù sao, vấn đề này đã lỗi thời với tôi bây giờ. Đó là tất cả về bản sửa lỗi tùy chỉnh của chúng tôi đối với thư viện bên thứ ba. Tuy nhiên, bản sửa lỗi đã được đưa vào bản phát hành chính thức của thư viện đó.
Cimlman

0

Có thể tạo một kho lưu trữ github riêng.

  1. Nhấp vào dự án mới
  2. Chọn Nhập
  3. Chọn github
  4. OAuth2 được sử dụng để xác thực và tự động tạo ứng dụng gitlab
  5. Chọn dự án để phân nhánh

^ Tôi vừa thực hiện việc này với một repo riêng tư trên github, được nhập thành công (bao gồm các chi nhánh, v.v.). Dự án đã nhập tự động được giữ riêng tư;)


2
Việc nhập dự án yêu cầu phải có "Mã truy cập cá nhân". Tôi đã cố gắng tạo một tài khoản trên GitHub. Có vẻ như tính năng này hữu ích khi tôi muốn tạo một dự án trên GitLab từ dự án của tôi trên GitHub. Giả thiết này có đúng không? Câu hỏi là về việc tạo một dự án GitHub của người khác.
Cimlman

2
-1 bởi vì, và như nhận xét trước đã nói, câu hỏi là về việc tạo một dự án github của người khác. Các hướng dẫn trong câu trả lời này sẽ không hoạt động trong trường hợp như vậy.
Nikos Alexandris

1
@NikosAlexandris bạn có chắc không? Bạn không thể tạo mã thông báo truy cập cho tài khoản của mình và truy cập kho của người khác mà bạn có quyền đọc? (ví dụ: mọi repo công khai)
DGoiko

0

Thay vì phân nhánh, bạn có thể nhập bất kỳ kho lưu trữ GitHub công khai nào chỉ sử dụng giao diện web:

  1. Từ trang tổng quan GitLab của bạn, nhấp vào Dự án mới
  2. Chuyển sang tab Nhập dự án
  3. Click vào Repo bằng URL nút
  4. Điền vào "URL kho lưu trữ Git" và các trường dự án còn lại
  5. Nhấp vào Tạo dự án để bắt đầu quá trình nhập
  6. Sau khi hoàn tất, bạn sẽ được chuyển hướng đến dự án mới tạo của mình

Đã sử dụng kỹ thuật này gần đây và nó hoạt động trên bất kỳ kho lưu trữ công cộng nào ngay cả khi không có tài khoản GitHub. Xem này trang tài liệu GitLab này để biết nguồn thông tin.


1
ĐỒNG Ý. Và nếu các cam kết mới được thêm vào kho lưu trữ ban đầu trên GitHub, tôi có thể chỉ cần hợp nhất các thay đổi vào kho lưu trữ trên GitHub không? Đây là một hoạt động phức tạp và có thể không thể thực hiện được nếu không có kho lưu trữ trung gian (xem đoạn cuối của câu hỏi).
Cimlman
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.