Mevcut bir repodaki bir şubeden nasıl yeni bir GitHub repo oluşturabilirim?


171

Ben usta ve yeni proje dalları. Ve şimdi yeni proje şubesine dayanan ustasıyla yepyeni bir repo oluşturmak istiyorum.

Arka plan: Üç bağımsız uygulama içeren bir havuzum var. Bu şekilde başlamadı. Aslen repoda sadece bir uygulama vardı. Ancak zamanla iş ihtiyaçları değişti. Bir uygulama iki oldu (eski sürüm ve yeniden yazma.) Bir web hizmeti eklendi. Üç projeyi kapsamak için ayrı şubeler kullanılmıştır. Ancak, herhangi bir kod paylaşmazlar. Ve böylece onların kendi depolarına ayrılmaları daha kolay olurdu.

Yanıtlar:


294

@ User292677'nin fikriyle başladım ve sorunumu çözmek için geliştirdim:

  1. Github'da yeni repo oluşturun .
  2. cd'yi ayıklamak istediğiniz eski repoyu yerel kopyanıza kopyalayın ; yeni repo ustası olacak yeni proje dalını izlemek için ayarlanır .
  3. $ git push https://github.com/accountname/new-repo.git +new-project:master

Yeni Github repo bitti. Sonuç;

  • new-repo adında yeni bir Github deposu ,
  • kimin masterkarşılık eski Repo en etmek yeni projesi ile
  • tüm tarih korunmuş.

Aslında, bu yöntemi kullanarak, yeni repo'yu, istediğim gibi yeniden adlandırılan, elle seçilmiş bir şube seçimi ile oluşturabileceğimi buldum:

$ git push git@github.com:accountname/new_repo +new-project:master +site3a:rails3

Sonuç önceden var olduğunu site3a dalı şimdi de yeni repo taşınır ve şu şekilde görünecektir raylar 3. . Bu gerçekten iyi çalışıyor: ağ şeması yeni master ve rails3'ü tam geçmişiyle ve birbirleriyle doğru ilişkilerinde gösteriyor.

2013-12-07 Güncellemesi: Bunu başka bir projeyle kullandı ve bu tarifin hala çalıştığını doğruladı.

Güncelleme 2018-01-11: https protokolü için GitHub önerisini kullanmak üzere 3. adım güncellendi. Tarif hala çalışıyor.


Merhaba @Dogweather, bunu paylaştığın için teşekkürler. yönteminiz arasındaki fark nedir explian ve kökeni uzaktan url değiştirmek, yeni repo yöntemi itmek?
Vincent

5
Dogweather, çözümünü hatırlayabildiğimden daha fazla kullandım. Teşekkürler! Bu benim için çalıştı önce old_branch ilk ödeme vardı
Bjorn

3
bunun etiketleri kopyalamayacağını unutmayın. Buna ihtiyaç duyabileceğine inanıyorum --follow-tags.
Factor Mystic

1
Github'da bir repo oluşturmanız gerekmediğine dikkat edin, sadece pushyerel bir repo yapabilirsiniz (yani git initGithub> Yeni> ... yerine)
OJFord

1
Tüm taahhüt geçmişimi yeni repoya aktarmak istemiyorum, sadece çocuk deposuna ait olan taahhütleri kopyalamak istedim. Mümkün mü ??
Arbaz Rizvi

27

Güncelleme:

cd, old_branch içeren yerel repo ve:

$ git push https://github.com/accountname/new_repo.git +old_branch:master

9
git clone -b new-project /path/to/repo /new/repo/path

Düzenleme: GitHub içinde repoyu “çatallayabilir”, ardından klonunuzdaki Yönetici sekmesine gidebilirsiniz. "Havuz adı" ve "Görünürlük" ün altında, açılır menü içeren "Varsayılan Şube" bulunur. Seçin new-project.

Yeniden düzenleme: masterSadece "varsayılan" dal değil, ayarlamak istediğiniz dal olduğunu fark ettim . Yani…

  • GitHub'dan günü, klon them/repoiçin you/repo.
  • Çalıştırmak git clone git@github.com:you/repo.git
  • Başlat gitk.
  • [ old-masterEski taahhütlerin izini kaybetmemek için bir şube oluşturmak isteyebilirsiniz .]
  • new-projectŞube ile ilgili en son taahhüdü bulun , taahhüt mesajına sağ tıklayın ve “Ana dalı buraya sıfırla” yı seçin. (Bunu komut satırında kullanarak da yapabilirsiniz git-reset, ancak doğru çağrıyı bulamadım.)

GitHub repo'nuza bir sonraki basmanızın --forceseçenekle yapılması gerekecek , ancak aksi takdirde işiniz bitti.

Kendi deponuzdan biriyse bunu yapıyorsunuz…

  • Çalıştırmak git clone git@github.com:you/orig.git
  • Çalıştırmak git clone orig copy
  • Yukarıda açıkladığım gibi, ancak yerel copyrepodan, masterşubeyi istediğiniz yere sıfırlayın .
  • Boş GitHub projesini oluşturun you/copy. Bu projeyi yerel sürümünüz copy, push master, ve uzaktan işiniz için bir uzaktan kumanda olarak ayarlamak üzere GitHub'daki talimatları izleyin .

Hmm! İlk adımı nasıl yapacağımdan emin değilim: github içinde bir repo klonlamak. Bunun mümkün olduğunu düşünmüyorum.
Dogweather

@Dogweather, GitHub'da “çatal” olarak adlandırılır; Cevabımı netlik için düzenledim.
JC Salomon

Tek bir hesapta repo yapamadım. Bunu kendin denedin mi?
Dogweather

5
  1. Github içinde NEW_REPOSITORY oluşturun.
  2. cd OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + master: master

Ve hepsi bu. (Not: git geçmişi korunur)

Yukarıdaki cevabı denemiştim ve bunu belirtmediği gibi yeterince spesifik bulmamıştım + usta: usta, çalışmasını sağlamak için ihtiyacım olan şey bu. Harika çalışıyor.

Kaynak (github ile ilgili ssh sorunlarını önlemek için yaptığım değişiklikler ile): Mauricio Aiello, eski Java Kıdemli Geliştirici, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a dalı meydana getiren-bir-varolan-depoda


Bu aslında kabul edilen cevaptan daha kullanışlı. Git, eskiyi yeni depoya aktarmada başarısız olduğunda src refspec hatalarından şikayetçi olduğu durumlarda bile çalışır.
Informagic

2

Bunun iyi bir yol olup olmadığından emin değilim, ancak yine de kolay:

git clone -b new-project git@github.com:User/YourProject.git newProjcet

Sonra github'da yeni bir repo oluşturun ve itin.


2

Sadece yeni bir repo oluşturduğunuzda, eskisine olan referansınızı kaybedersiniz ve yenisiyle senkronize edilen orijinal projede yapılan güncellemeleri korumayı zorlaştırırsınız. Belki de repoyu çatallamak daha iyi değil mi?


0

Doğru cevaba küçük bir ekleme:

$ git push git@github.com: hesap adı / new_repo + old_branch: master

"git@github.com: accountname / new_repo" => github'dan al "Klonla veya indir" açılan menüsü

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.