Bagaimana cara menduplikasi repositori git? (tanpa garpu)

117

Saya memiliki dua repositori, dan saya perlu menyalin seluruh dari satu ke yang kosong lainnya yang memiliki tingkat akses berbeda dari yang pertama. Salinan dan repositori induk tidak boleh dihubungkan bersama.

Saya baru mengenal git dan akan luar biasa jika seseorang dapat membantu saya dalam hal ini.

cowboybebop
sumber
5
tidak yakin, tetapi saya rasa Anda bisa mengkloningnya dan kemudian menggunakan git config remote.origin.url git: //new.url/proj.git untuk menyetel remote.origin ke perwakilan baru Anda.
Rufinus
ya tautan yang baru saja saya posting melakukan hal seperti itu.
nbz
@rudinus Saya melakukan hal itu. Terima kasih.
cowboybebop

Jawaban:

205

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

Versi pendek:

Untuk membuat duplikat yang tepat, Anda perlu melakukan bare-clone dan 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

CATATAN: hal di atas akan berfungsi dengan baik dengan repo git jarak jauh apa pun, instruksinya tidak khusus untuk github

Di atas membuat salinan jarak jauh baru dari repo. Kemudian klon ke mesin kerja Anda.

Larry K
sumber
2
Apa yang terjadi jika Repositori lama dan baru memiliki nama yang sama (bukan URL git yang sama). Seperti pada saya hanya Jeremy.gitJeremy.git
mengkloning
Ini bukan duplikat persis. Masalah tidak akan ditransfer.
Slam
Apakah ini melestarikan sejarah?
Thomas
@Thomas Saya baru saja melakukan ini dan ya, itu menyimpan semua sejarah saya dalam salinannya. Perhatikan bahwa setelah Anda mendorong dan cd ke repo baru, masih tidak ada apa-apa di sana karena Anda telah mendorong ke remote, jadi Anda perlu melakukan penarikan
PfunnyGuy
7
Agar jawaban ini bekerja dengan GitHub, pertama-tama kita harus membuat repositori baru di GitHub.
Alex Holcombe
23

Anda juga dapat menggunakan git-copy .

Instal dengan Permata,

gem install git-copy

Kemudian

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git
Quanlong
sumber
1
Bagaimana cara Anda menginstal gem? Ini sepertinya solusi yang paling tidak merepotkan. Suara positif!
saran3h
Ini biasanya merupakan bagian dari instalasi Ruby. Di Ubuntu lakukan sudo apt install ruby.
membahayakan
10

Jika Anda menyalin ke GitHub, Anda dapat menggunakan Pengimpor GitHub untuk melakukannya untuk Anda. Repo asli bahkan bisa dari sistem kontrol versi lain.

Mateus Gondim
sumber
4
Ini bekerja dengan sempurna dan bahkan menyimpan sejarah - harus mendapat suara positif lebih tinggi
John D
1
Saya setuju. Pendekatan ini jauh lebih intuitif, dapat dilakukan sepenuhnya dalam GUI Github, dan tidak melibatkan omong kosong baris perintah yang membingungkan. Langkah-langkah: 1) Di GUI buat repo baru tetapi jangan klik kotak centang berlabel "Inisialisasi repositori ini dengan README" Setelah Anda melakukan ini, Github akan menampilkan halaman baru dan opsi berlabel "… atau impor kode dari repositori lain. " Itu dia!
Luke F.
5

Jika Anda hanya ingin membuat repositori baru menggunakan semua atau sebagian besar file dari yang sudah ada (misalnya, sebagai semacam template), saya menemukan pendekatan termudah adalah membuat repo baru dengan nama yang diinginkan, dll., Klon ke desktop Anda, lalu tambahkan saja file dan folder yang Anda inginkan di dalamnya.

Anda tidak mendapatkan semua sejarah dll, tetapi Anda mungkin tidak menginginkannya dalam kasus ini.

tim
sumber
-1

Buka Terminal.

Buat tiruan kosong dari repositori.

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

Kundan roy
sumber
Saya mencoba pendekatan Anda. Dan saya mendapat pesan kesalahan ini:! [ditolak jauh] master -> master (hook pra-terima ditolak) dan beberapa pesan serupa lainnya. Yang terakhir adalah: error: gagal mendorong beberapa referensi Bagaimana saya bisa memperbaikinya?
LND