GitHub: Bagaimana cara membuat garpu repositori publik pribadi?

247

Bagaimana saya bisa garpu repositori publik, tetapi membuat garpu saya pribadi? Saya memiliki langganan untuk mendukung repositori pribadi.

zer0stimulus
sumber

Jawaban:

394

Jawabannya benar tetapi tidak menyebutkan cara menyinkronkan kode antara repo publik dan garpu.

Berikut ini adalah alur kerja lengkap (kami telah melakukan ini sebelum membuka sumber React Native ):


Pertama, duplikat repo seperti yang orang lain katakan (detail di sini ):

Buat repo baru (sebut saja private-repo) melalui UI Github . Kemudian:

git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git

Kloning repo pribadi sehingga Anda dapat mengerjakannya:

git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master

Untuk menarik minat baru dari repo publik:

cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master

Luar biasa, repo pribadi Anda sekarang memiliki kode terbaru dari repo publik plus perubahan Anda.


Akhirnya, untuk membuat permintaan tarik repo pribadi -> repo publik:

Gunakan GitHub UI untuk membuat garpu repo publik (tombol "Fork" kecil di kanan atas halaman repo publik). Kemudian:

git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname

Sekarang Anda dapat membuat permintaan tarik melalui Github UI untuk repo publik, seperti dijelaskan di sini .

Setelah pemilik proyek meninjau permintaan tarik Anda, mereka dapat menggabungkannya.

Tentu saja seluruh proses dapat diulangi (tinggalkan saja langkah-langkah di mana Anda menambahkan remote).

Martin Konicek
sumber
2
Mengapa seseorang tidak dapat hanya menambahkan repo pribadi kosong sebagai remote baru ke klon normal repo publik dan kemudian mendorong ke remote? Apa bedanya?
Falko Menge
@ FalkoMenge Saya punya pertanyaan yang sama. Membaca git-scm.com/docs/git-clone , sepertinya normal git cloneakan mengatur cabang pelacakan jarak jauh dan mungkin beberapa konfigurasi lain dalam repo kloning yang tidak Anda inginkan. Sedangkan --bare clone hanya menyalin dir .git dari remote seperti apa adanya.
bennlich
1
Apakah itu juga akan mendorong riwayat komitmen pribadi ke cabang publik?
Sukhjinder Singh
1
@ Sukhjinder Singh Ya, langkah terakhir akan mendorong riwayat komit pribadi ke repo publik. Jika Anda tidak menginginkannya, Anda bisa menekan komit saat menggabungkannya ke repo publik, dan mendorong satu komit dengan semua perubahan Anda. Lihat misalnya stackoverflow.com/questions/5308816/how-to-use-git-merge-squash
Martin Konicek
1
Saya harus melangkah di mana saya mengkloning repo pribadi saya dan kemudian membuat perubahan lalu mendorong. Setiap perubahan yang saya buat tidak diketahui oleh git. git statusmenunjukkan semuanya up to date, membersihkan pohon kerja tidak peduli apa pun yang saya ubah. Akibatnya saya tidak bisa melakukan dan mendorong apa pun. Saya menghapus repo pribadi baru yang saya buat 2 kali lebih banyak untuk mencoba ini tetapi terus mengalami masalah yang sama. Ada saran?
Will
92

Ada satu opsi lagi sekarang (Januari-2015)

  1. Buat repo pribadi baru
  2. Pada layar repo kosong ada opsi / tombol "impor" masukkan deskripsi gambar di sini
  3. klik dan pasang url github repo yang ada. Tidak ada opsi github yang disebutkan tetapi ia juga bekerja dengan github repo masukkan deskripsi gambar di sini
  4. DIBUAT
Szydan
sumber
19
Ini bekerja, walaupun sedikit berbeda. (Saya mencoba pada Agustus 2015). Saya tidak menemukan opsi impor / tombol, jadi googled dan berakhir di URL ini. import.github.com/new Di sini, Anda dapat memasukkan url github yang ada dan klik tombol Check it . Setelah diverifikasi, Anda dapat memasukkan nama repo baru Anda dan klik tombol Pribadi dan kemudian klik Mulai Impor
Siwa
2
Saya percaya @MattvanAndel berarti komentarnya benar, bukan jawaban aslinya. Saya juga mengikuti komentar Shiva dan itu berhasil. Perhatikan bahwa Anda TIDAK boleh membuat repositori pribadi lokal terlebih dahulu!
David H
Jika saya membuat "garpu" pribadi dengan cara ini dan ingin menjadikannya garpu publik lagi, bisakah saya melakukannya?
Anders Lindén
2
@ Shiva Saya akan menjawab jika Anda memberikan jawaban atas komentar Anda.
bebbi
36

Jawaban saat ini agak ketinggalan zaman, untuk kejelasan:

Jawaban singkatnya adalah:

  1. Lakukan tiruan kosong dari repo publik.
  2. Buat yang baru pribadi.
  3. Lakukan push mirror ke yang pribadi.

Ini didokumentasikan di GitHub: duplikasi-a-repositori

stefano
sumber
4
Apakah ada cara untuk menarik perubahan ke atas? Ini penting untuk repo yang memiliki lisensi liberal - Saya telah membuat repo saya pribadi tetapi masih ingin menggabungkan perubahan hulu.
amarprabhu
2
Iya. Anda harus dapat menambahkan repo lain sebagai remote (pelacakan) baru (mis. 'Other-repo') dan kemudian secara berkala mengambil dan menggabungkan perubahan darinya (mis. 'Git merge-repo / stable').
stefano
26

Anda harus menggandakan repo

Anda dapat melihat dokumen ini (dari github)

Untuk membuat duplikat dari repositori tanpa forking, Anda perlu menjalankan perintah klon khusus terhadap repositori asli dan mirror-push ke yang baru.

Dalam kasus-kasus berikut, repositori yang ingin Anda dorong - seperti contoh pengguna / repositori baru atau pengguna contoh / mirrored - seharusnya sudah ada di GitHub. Lihat "Membuat repositori baru" untuk informasi lebih lanjut.

Mencerminkan repositori

Untuk membuat duplikat yang tepat, Anda harus melakukan kloning kosong dan mirror-push.

Buka baris perintah, dan ketik perintah ini:

$ 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

Jika Anda ingin mirror repositori di lokasi lain, termasuk mendapatkan pembaruan dari aslinya, Anda dapat mengkloning mirror dan secara berkala menekan perubahan.

$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
# Make a bare mirrored clone of the repository

$ cd repository-to-mirror.git
$ git remote set-url --push origin https://github.com/exampleuser/mirrored
# Set the push location to your mirror

Seperti halnya klon kosong, klon cermin mencakup semua cabang dan tag jarak jauh, tetapi semua referensi lokal akan ditimpa setiap kali Anda mengambilnya, jadi itu akan selalu sama dengan repositori asli. Mengatur URL untuk push menyederhanakan mendorong ke mirror Anda. Untuk memperbarui cermin Anda, ambil pembaruan dan tekan, yang bisa otomatis dengan menjalankan tugas cron.

$ git fetch -p origin
$ git push --mirror

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

bsuttor
sumber
Ini membuat klon dari repo tetapi tidak membuat garpu dalam arti GitHub. Saat Anda membuat fork aktual di GitHub, ia memperlihatkan teks "forked from exampleuser / repository-to-mirror" di bawah nama fork. Itu juga memperlihatkan pohon dari semua garpu lain ketika Anda menavigasi ke github.com/exampleuser/new-repository/network/members.
apaatsio
20

GitHub sekarang memiliki opsi impor yang memungkinkan Anda memilih apa pun yang Anda inginkan, repositori yang diimpor, publik atau pribadi

Impor Repositori Github

Yidir
sumber
Impor masih berjalan di repositori besar (5 hari), memeriksanya jauh lebih cepat tapi mungkin itu langkah lebih lanjut untuk tetap up to date. Kelambatan dimengerti, saya kira karena mengimpor semuanya bukan hanya cabang master, tapi saya berharap itu lebih cepat ...
Liam Mitchell
1
Saya akan menambahkan jawaban yang sama tetapi terima kasih telah melakukannya terlebih dahulu. Senang bahwa repo pribadi Github Gratis tersedia sejak Januari tahun lalu. : D
OBL