Làm thế nào để nhân bản kho lưu trữ git? (không có fork)


117

Tôi có hai kho lưu trữ và tôi cần sao chép toàn bộ một kho này sang một kho khác trống có cấp độ truy cập khác với kho lưu trữ đầu tiên. Bản sao và kho lưu trữ mẹ không được liên kết với nhau.

Tôi mới sử dụng git và sẽ thật tuyệt nếu ai đó có thể giúp tôi việc này.


5
không chắc chắn, nhưng tôi đoán bạn có thể sao chép nó và sau đó sử dụng git config remote.origin.url git: //new.url/proj.git để đặt remote.origin thành đại diện mới của bạn.
Rufinus

ya liên kết tôi vừa đăng làm một cái gì đó như thế.
nbz

@rudinus Tôi đã làm điều đó. Cảm ơn.
Cowboy Bebop

Câu trả lời:


205

Xem https://help.github.com/articles/duplicating-a-repository

Phiên bản ngắn:

Để tạo một bản sao chính xác, bạn cần thực hiện cả nhân bản trần và nhân bản:

mkdir foo; cd foo 
# move to a scratch dir

git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

cd ..
rm -rf old-repository.git  
# Remove our temporary local repository

LƯU Ý: cách trên sẽ hoạt động tốt với bất kỳ repo git từ xa nào, hướng dẫn không dành riêng cho github

Ở trên tạo một bản sao từ xa mới của repo. Sau đó sao chép nó xuống máy làm việc của bạn.


2
Điều gì sẽ xảy ra nếu Kho lưu trữ cũ và mới có cùng tên (không cùng URL git). Như trong tôi chỉ bắt chước Jeremy.gitthành khácJeremy.git
gran_profaci

Đây sẽ không phải là một bản sao chính xác. Các vấn đề sẽ không được chuyển.
Slam

Điều này có bảo tồn lịch sử không?
Thomas

@Thomas Tôi vừa làm điều này và vâng, nó đã lưu giữ tất cả lịch sử của tôi trong bản sao. Lưu ý rằng sau khi bạn đẩy và cd vào repo mới, bạn vẫn có gì ở đó vì bạn đã đẩy lên từ xa, vì vậy bạn cần phải làm một pull
PfunnyGuy

7
Để câu trả lời này hoạt động với GitHub, trước tiên người ta phải tạo kho lưu trữ mới trên GitHub.
Alex Holcombe

22

Bạn cũng có thể sử dụng git-copy .

Cài đặt nó bằng Gem,

gem install git-copy

Sau đó

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git

1
Làm thế nào để bạn cài đặt đá quý ngay từ đầu? Đây có vẻ như là giải pháp đơn giản nhất. Đã ủng hộ!
saran3h

Nó thường là một phần của cài đặt Ruby. Trên Ubuntu thì có sudo apt install ruby.
hại

9

Nếu bạn đang sao chép sang GitHub, bạn có thể sử dụng Trình nhập GitHub để làm điều đó cho bạn. Bản repo gốc thậm chí có thể là từ các hệ thống kiểm soát phiên bản khác.


4
Điều này hoạt động hoàn hảo và thậm chí còn lưu giữ lịch sử - sẽ được ủng hộ cao hơn
John D

1
Tôi đồng ý. Cách tiếp cận này trực quan hơn nhiều, nó có thể được thực hiện hoàn toàn trong Github GUI và không liên quan đến bất kỳ dòng lệnh khó hiểu nào. Các bước: 1) Trong GUI, tạo kho lưu trữ mới nhưng không nhấp vào hộp kiểm có nhãn "Khởi tạo kho lưu trữ này bằng README" Sau khi bạn làm điều này, Github sẽ hiển thị cho bạn một trang mới và một tùy chọn có nhãn "… hoặc nhập mã từ một kho lưu trữ khác. " Đó là nó!
Luke F.

5

Nếu bạn chỉ muốn tạo một kho lưu trữ mới bằng cách sử dụng tất cả hoặc hầu hết các tệp từ một kho lưu trữ hiện có (tức là như một loại mẫu), tôi thấy cách tiếp cận dễ nhất là tạo một kho lưu trữ mới với tên mong muốn, v.v., sao chép nó thành màn hình của bạn, sau đó chỉ cần thêm các tệp và thư mục bạn muốn vào đó.

Bạn không nhận được tất cả lịch sử, v.v., nhưng có thể bạn không muốn điều đó trong trường hợp này.


-1

Mở thiết bị đầu cuối.

Tạo một bản sao trần của kho lưu trữ.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git


Tôi đã thử cách tiếp cận của bạn. Và tôi nhận được thông báo lỗi này:! [từ chối từ xa] master -> master (hook nhận trước bị từ chối) và một số thông báo tương tự khác. Điều cuối cùng là: error: không thể đẩy một số giới thiệu Làm cách nào để sửa lỗi đó?
LND
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.