2010-07-14 10 views
12

GitHub.com'a eklemek istediğim birçok projem var. Tüm bu projeler yerel Git deposumda. Sadece bir havuzum var, fakat her proje için 1 GitHub projesine sahip olmak istiyorum. Böylelikle, proje tarafından hatalar organize edilebilir.Alt klasörlerdeki birden çok alt projeyi mi ele alın?

Bunu nasıl ayarlayabilirim ki yönetmek bu kadar zor değil mi? Depo düzenimi yeniden yapmam ve her proje için yerel olarak yeni git depoları oluşturmam gerekiyor mu? Bu gerçekten çok zaman alacaktı ve Git tarihini kaybediyor olabilirim. Ben soruyu anlamak ediyorsam Walter

cevap

15

sizin Repo nasıl organize edildiğine bağlı olarak, her bir proje sadece geçmişini koruyarak her proje için yeni bir repo oluşturmak için git filter-branch kullanabilirsiniz.

mevcut repo yapısını varsayarsak şu şekildedir:

repo/ 
    project1/ 
    project1-file 
    project2/ 
    project2-file 
    project3/ 
    project3-file 

yapabilirsiniz ilk sizin Repo klon (git filter-branch orijinal repo dosyaları ve onların geçmişi kaldırmak, böylece klon olacak ilk) . Ardından, klonlanmış repo, sen project1 kökünde (tüm eski geçmişi olan) yeni bir repo oluşturmak için git filter-branch kullanabilirsiniz: Şimdi

$ git filter-branch --subdirectory-filter project1 HEAD 

, senin Repo aşağıdaki gibi görünecektir:

repo/ 
    project1-file 

Eski repoda project1/ altında saklanan tüm dosyaların geçmişini yine de içerecektir.

Her proje için bu adımı yineleyin ve artık ilgili projeleri için tüm geçmişe sahip üç bağımsız deponuz olacak.

+0

Teşekkürler, tam olarak ne istediğimi gibi görünüyor. –

5

, sen bir takım projeler içeren tek bir büyük repo var. Bu projelerin her birini, geçmişi kaybetmeden bireysel reposlara ayırmak istersiniz. Alt satır evet, depo düzeninizi yeniden yapmanız ve her proje için yeni git depoları oluşturmanız gerekir. Yine de tarihi kaybetmek zorunda değilsin.

  1. Geçerli alt koleksiyonunuzun bir kopyasını alın, her alt proje için bir kopya.
  2. Yeni reposların her birinde, bu repo ile ilişkili olan dışındaki tüm diğer projeleri silin.

Orijinal repo'yu kırmadan önce tüm geçmişe sahip olacaksınız, ancak şimdi her proje kendi deposudur.

Geçmişinizi kaybetmeyi önemsemiyorsanız, her projeyi kendi git repo'larına dönüştürmek, proje dizininde git init'u çalıştırmak kadar basittir. Bu sadece bu proje için yeni bir repo oluşturacaktır.

+0

Bu mantıklı. Sanırım ne yapacağım, her proje için ikincisini yap. Ben github yayınlamak için hazır olduğumda, ben nispeten temiz bir codebase sahip olmak istiyorum ... –