Github'daki bir git deposunu aynı kuruluşa kopyalayın / çatallayın


84

Github'da iki farklı alana dağıtılan bir web uygulamasını içeren bir depom var. Uygulama, dağıtıldığı etki alanına bağlı olarak farklı davranmak için burada ve orada hafif mantık çatallarına sahiptir.

Her alan için bir tane olmak üzere iki ayrı depoya bölmek istediğim noktaya geldi.

Github bunu aynı organizasyona bağlamama izin vermiyor. "Git duplicate repo" araması, çıplak klonlamam ve aynayı itmem gerektiğini gösteriyor, ancak bu, her iki depoyu da senkronize tutmak için gibi görünüyor ki bunu yapmak istemiyorum.

Bunu yapmanın en iyi yolu nedir? Mümkünse yeni kopyadaki eski işleme geçmişini korumak istiyorum.


1
Aslında, git clone --bareve git push --mirrorseçenekleri tam olarak istediğiniz şeydir. Bu, her iki depoyu da senkronize etmez. Ancak tüm dallar, etiketler vb. Dahil her şeyi korur . Bir kopya oluşturmak için bunu geçici bir dizinde yapmanız yeterlidir. Ardından yeni kopyayı doğrudan uzaktan kumandanızdan proje dizininizde kopyalayın.
vastlysuperiorman

Yanıtlar:


104

Sadece yeni bir depo oluşturun ve çalışan kopyanızdan ona gönderin:

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

Şimdi myrepo-new, aynı olan yeni bir deponuz var myrepo-original.


3
Tamam ve bunlar birbirini takip etmeyecek, değil mi? İki ayrı bağlantısız depo haline geldikleri anlamına mı geliyor? İstediğim bu.
jemminger

3
pushAçıkça siz ona gitmedikçe hiçbir arşiv güncellenmeyecek ve "yeni" havuz eskisiyle herhangi bir ilişki göstermeyecektir.
larsks

Teşekkürler! Görünüşe göre ihtiyacım olan şey bu.
jemminger

3
Ayrıca tüm şubeleri itebilirsiniz:git push --all origin
Marius

Bu benim için çalıştı, ancak URL için farklı bir biçime geçmek zorunda kaldım: $ git remote set-url github.com/me/myrepo-new.git
Enfors

15

Çatal ilişkisine ihtiyacınız yoksa (örneğin, herhangi bir nedenle bir tür ayrıştırılmış alternatif depo istiyorsanız), repoyu Google'ın bulduğu ana hatlarıyla çoğaltmak ve larsks'ın cevabı iyidir.

Eğer varsa do bir çatal, kontak Github desteği (support@github.com veya yapmak istiyorum https://github.com/support ) ve onlar sizin için aynı organizasyonda bir çatal yaratacaktır. (Bu konuda da seçici değiller, sadece repo için alternatif bir isim vermeniz gerekecek, çünkü bir hesaptaki repo isimleri benzersiz olmalıdır.)


Güncelleme : Kullanıcı Steve Rice aşağıdaki yorumlarda GitHub Destek'in desteğin şu anda hesabınızda ikinci bir çatal oluşturmayacağını / artık kurmayacağını belirttiğini bildirdi.

GitHub kısa süre önce bir depoyu aynı hesaba çatallamanın olası alternatifleri hakkında bir makale yayınladı. Bu makaleyi buradan okuyabilirsiniz .


4
Desteğe başvuruldu, yanıtı: "Şu anda, bir hesap aynı ağda iki depoya sahip olamaz." Bunun yerine bir ayna deposu kurmayı öneriyorlar .
Steve Rice

ahw bu berbat. üzgünüm, politikalarını değiştirdiklerini bilmiyordum :(
Nevik Rehnel

10

Sayfanın üst kısmındaki + menüsünde Github'ın Depoyu İçe Aktar seçeneğini kullanın veya sadece açın

https://github.com/new/import

Bu, kopyalanan havuzun tam içeriğiyle yeni bir havuz oluşturur. Dezavantajı ( Iarsks'ın cevap verdiği git komutlarında olduğu gibi ) Github için bir çatal olarak sayılmamasıdır.


Bu seçeneğin çalışmasını nasıl sağlayamadınız? Sadece tekrar test ettim ve iki kolay adımda çalışıyor. Alternatif olarak, github'da yerel bir depo oluşturun, ardından oradaki içe aktarma özelliğini kullanın, örneğin github.com/sarob/mytest/import .
sarob

GHE vs github.com ile ilgili bir şey olabilir ama orada çalışmıyor.
serraosays

4

Başka bir yol da kopyalanacak orijinal depoyu mevcut depomuz için uzak olarak eklemektir.

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

Yerel terminalinizde şunu çalıştırın:

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

Alternatif çözüm:

Yeni bir organizasyon oluşturun ve onu oraya ayırın. Depo özelse, yeni kuruluşta da gizli kalacaktır. Ardından harici geliştiricilere veya çatallı depoya istediğiniz kişiye erişim izni verebilir ve PR'leri orijinal depoya geri döndürebilirler.


-2

Yerel klasörü kopyalayıp git öğelerini silemez miydiniz:

rm -rf .git*

O zaman o klasörde yeni bir depo mu oluşturacaksınız? Daha temiz ve daha kolay görünüyor.


2
Silme ./.git/, OP'nin "mümkünse yeni kopyadaki eski işleme geçmişini korumak için" belirtilen niyete yardımcı olmaz.
MarkHu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.