Sao chép / fork một repo git trên github vào cùng một tổ chức


82

Tôi có một repo trên github chứa một ứng dụng web được triển khai cho hai miền khác nhau. Ứng dụng có các nhánh logic nhẹ ở đây và ở đó để hoạt động khác nhau tùy thuộc vào miền mà nó được triển khai.

Nó đến mức tôi muốn chia nó thành hai repo riêng biệt, một cho mỗi miền.

Github sẽ không cho phép tôi chuyển nó vào cùng một tổ chức. Tìm kiếm "git trùng lặp repo" cho thấy tôi không nên sao chép và nhân bản đẩy nó, nhưng điều đó dường như là để giữ đồng bộ cả hai repo, điều mà tôi không muốn làm.

Cách tốt nhất để làm điều này là gì? Tôi muốn lưu giữ lịch sử cam kết cũ trong bản sao mới nếu có thể.


1
Trên thực tế, các tùy chọn git clone --baregit push --mirrorchính xác là những gì bạn muốn. Điều này không giữ cho cả hai repo được đồng bộ hóa. Nhưng nó bảo toàn mọi thứ , bao gồm tất cả các nhánh, thẻ, v.v. Chỉ cần thực hiện việc này trong một thư mục tạm thời để tạo một bản sao. Sau đó, sao chép bản sao mới trực tiếp từ điều khiển từ xa của bạn trong thư mục dự án của bạn.
growlysuperiorman

Câu trả lời:


103

Chỉ cần tạo một kho lưu trữ mới và đẩy đến nó từ bản sao làm việc của bạn:

git clone git@github.com:me/myrepo-original
cd myrepo-original
git remote set-url origin git@github.com:me/myrepo-new
git push origin master

Bây giờ bạn có một kho lưu trữ mới, myrepo-newgiống hệt với myrepo-original.


3
Ok, và những thứ này sẽ không theo dõi nhau, phải không? Có nghĩa là chúng trở thành hai repo bị ngắt kết nối riêng biệt? Đó là điều tôi muốn.
jemminger

3
Cả hai kho lưu trữ sẽ không cập nhật trừ khi bạn pushsử dụng nó một cách rõ ràng và kho lưu trữ "mới" sẽ không hiển thị bất kỳ mối quan hệ nào với kho lưu trữ cũ.
larsks

Cảm ơn! Có vẻ như đây là thứ tôi cần.
jemminger

3
Bạn cũng có thể đẩy tất cả các nhánh:git push --all origin
Marius

Điều này phù hợp với tôi, nhưng tôi phải thay đổi sang định dạng khác cho URL: $ git remote set-url github.com/me/myrepo-new.git
Enfors

15

Nếu bạn không cần quan hệ rẽ nhánh (ví dụ: bạn muốn một số loại repo thay thế được tách rời vì bất kỳ lý do gì), sao chép repo như phác thảo mà Google tìm thấy và câu trả lời của larsks là tốt.

Nếu bạn làm muốn làm cho nó một ngã ba, liên hệ hỗ trợ Github (support@github.com hoặc https://github.com/support ), và họ sẽ tạo ra một ngã ba trên cùng một tổ chức cho bạn. (Họ cũng không kén chọn về điều này, bạn chỉ cần cung cấp một tên thay thế cho repo, vì tên repo trong tài khoản phải là duy nhất.)


Cập nhật : Người dùng Steve Rice báo cáo trong các nhận xét bên dưới rằng Bộ phận hỗ trợ GitHub đã tuyên bố rằng bộ phận hỗ trợ hiện không / không còn thiết lập nhánh thứ hai trong tài khoản của bạn.

GitHub gần đây đã đăng một bài viết về các lựa chọn thay thế có thể có để chuyển một repo vào cùng một tài khoản. Bạn có thể đọc bài báo đó ở đây .


4
Liên hệ với bộ phận hỗ trợ, họ phản hồi: "Tại thời điểm này, một tài khoản không thể sở hữu hai repo trong cùng một mạng." Họ đề nghị thiết lập một repo gương để thay thế.
Steve Rice

à thật tệ. xin lỗi, tôi không biết họ đã thay đổi chính sách của mình :(
Nevik Rehnel 8/10/14

10

Sử dụng tùy chọn Kho lưu trữ Nhập của Github trên menu + ở đầu trang hoặc chỉ mở

https://github.com/new/import

Điều này tạo ra một kho lưu trữ mới với nội dung chính xác của kho lưu trữ được sao chép. Nhược điểm (giống như câu trả lời lệnh git của Iarsks ) là nó không được tính là một nhánh rẽ cho Github.


Làm thế nào bạn không thể làm cho tùy chọn này hoạt động? Tôi vừa thử nghiệm lại và nó hoạt động trong hai bước đơn giản. Ngoài ra, tạo một repo cục bộ trong github, sau đó sử dụng tính năng nhập ở đó, ví dụ: github.com/sarob/mytest/import .
sarob

Có thể là một cái gì đó với GHE và github.com của chúng tôi nhưng nó không hoạt động ở đó.
serraosays

4

Một cách khác là thêm repo gốc, được sao chép, làm từ xa cho repo hiện tại của chúng tôi.

#create a new repo in the org1 organization called myrepo-new

Trong nhà ga địa phương của bạn, hãy chạy:

git clone git@github.com:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master

1

Giải pháp thay thế:

Tạo một tổ chức mới và phân nhánh nó ở đó. Nếu repo là riêng tư, nó cũng sẽ ở chế độ riêng tư trong tổ chức mới. Sau đó, bạn có thể cấp quyền truy cập cho các nhà phát triển bên ngoài hoặc bất kỳ ai bạn muốn vào repo đã chia nhánh và họ có thể tăng PR trở lại repo ban đầu.


-2

Bạn không thể chỉ sao chép thư mục cục bộ, xóa nội dung git:

rm -rf .git*

Sau đó tạo một kho lưu trữ mới trong thư mục đó? Có vẻ sạch hơn và dễ dàng hơn.


2
Việc xóa ./.git/sẽ không giúp ích cho mục đích đã nêu của OP, "để bảo toàn lịch sử cam kết cũ trong bản sao mới nếu có thể."
MarkHu
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.