จะทำซ้ำที่เก็บ git ได้อย่างไร (ไม่มีส้อม)


117

ฉันมีที่เก็บสองแห่งและฉันจำเป็นต้องคัดลอกที่เก็บทั้งหมดไปยังอีกที่ว่างซึ่งมีระดับการเข้าถึงที่แตกต่างจากที่เก็บแรก ไม่ควรลิงก์สำเนาและที่เก็บแม่เข้าด้วยกัน

ฉันยังใหม่กับคอมไพล์และคงจะดีมากถ้ามีคนช่วยฉันเรื่องนี้


5
ไม่แน่ใจ แต่ฉันเดาว่าคุณสามารถโคลนได้จากนั้นใช้ git config remote.origin.url git: //new.url/proj.git เพื่อตั้งค่า remote.origin เป็นตัวแทนใหม่ของคุณ
Rufinus

ใช่ลิงค์ที่ฉันเพิ่งโพสต์ทำอะไรแบบนั้น
nbz

@rudinus ฉันทำแค่นั้น ขอบคุณ
cowboybebop

คำตอบ:


205

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

เวอร์ชั่นสั้น:

ในการสร้างสำเนาที่แน่นอนคุณต้องดำเนินการทั้งแบบ bare-clone และ mirror-push:

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

หมายเหตุ: ข้างต้นจะทำงานได้ดีกับ repo git ระยะไกลคำแนะนำไม่เฉพาะเจาะจงสำหรับ github

ข้างต้นสร้างสำเนาระยะไกลใหม่ของ repo จากนั้นโคลนลงในเครื่องที่ใช้งาน


2
จะเกิดอะไรขึ้นถ้า Repositories เก่าและใหม่มีชื่อเดียวกัน (ไม่ใช่ git URL เดียวกัน) ในขณะที่ฉันเพิ่งโคลนJeremy.gitเป็นอีกอันJeremy.git
gran_profaci

สิ่งนี้จะไม่ซ้ำกันทุกประการ ปัญหาจะไม่ถูกโอน
สแลม

สิ่งนี้รักษาประวัติศาสตร์หรือไม่?
Thomas

@ โทมัสฉันเพิ่งทำสิ่งนี้และใช่มันเก็บประวัติทั้งหมดของฉันไว้ในสำเนา โปรดทราบว่าหลังจากที่คุณกดและ cd ลงใน repo ใหม่แล้วก็ยังไม่มีอะไรอยู่ที่นั่นเพราะคุณกดไปที่รีโมทดังนั้นคุณต้องดึง
PfunnyGuy

7
สำหรับคำตอบนี้ในการทำงานกับ GitHub อันดับแรกต้องสร้างที่เก็บใหม่บน GitHub
Alex Holcombe

23

นอกจากนี้คุณยังสามารถใช้คอมไพล์สำเนา

ติดตั้งด้วยอัญมณี

gem install git-copy

แล้วก็

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

1
คุณติดตั้งอัญมณีอย่างไรในตอนแรก? นี่ดูเหมือนเป็นวิธีแก้ปัญหาที่ไม่ยุ่งยากที่สุด upvoted!
saran3h

โดยปกติจะเป็นส่วนหนึ่งของการติดตั้ง Ruby บน Ubuntu sudo apt install rubyทำ
อันตราย

10

หากคุณกำลังคัดลอกไปยัง GitHub คุณสามารถใช้GitHub Importerเพื่อดำเนินการดังกล่าวให้กับคุณ repo ดั้งเดิมอาจมาจากระบบควบคุมเวอร์ชันอื่น ๆ


4
สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบและยังคงรักษาประวัติศาสตร์ไว้ - ควรได้รับการโหวตให้สูงขึ้น
John D

1
ฉันเห็นด้วย. วิธีนี้ใช้งานง่ายกว่ามากสามารถทำได้ทั้งหมดภายใน Github GUI และไม่เกี่ยวข้องกับเรื่องไร้สาระของบรรทัดคำสั่งที่สับสน ขั้นตอน: 1) ใน GUI ให้สร้าง repo ใหม่ แต่อย่าคลิกช่องทำเครื่องหมาย "เริ่มต้นที่เก็บนี้ด้วย README" หลังจากที่คุณทำ Github นี้จะแสดงหน้าใหม่และตัวเลือกที่มีชื่อว่า "... หรือนำเข้ารหัสจาก ที่เก็บอื่น " แค่นั้นแหละ!
Luke F.

5

หากคุณแค่ต้องการสร้างที่เก็บใหม่โดยใช้ไฟล์ทั้งหมดหรือเกือบทั้งหมดจากไฟล์ที่มีอยู่ (เช่นเป็นเทมเพลตประเภทหนึ่ง) ฉันพบว่าวิธีที่ง่ายที่สุดคือการสร้าง repo ใหม่ด้วยชื่อที่ต้องการเป็นต้นโคลนเป็น เดสก์ท็อปของคุณจากนั้นเพิ่มไฟล์และโฟลเดอร์ที่คุณต้องการลงไป

คุณไม่ได้รับประวัติทั้งหมด ฯลฯ แต่คุณอาจไม่ต้องการสิ่งนั้นในกรณีนี้


-1

เปิด Terminal

สร้างโคลนเปล่าของที่เก็บ

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


ฉันลองแนวทางของคุณแล้ว และฉันได้รับข้อความแสดงข้อผิดพลาดนี้:! [ปฏิเสธจากระยะไกล] หลัก -> หลัก (เบ็ดรับล่วงหน้าถูกปฏิเสธ) และข้อความอื่น ๆ ที่คล้ายกัน สุดท้ายคือ: error: failed to push some refs ฉันจะแก้ไขได้อย่างไร?
LND
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.