2010-03-29 21 views
31

benim git depo aşağıdaki yapıya sahiptir varsayalım:Git deposunun bir bölümünü çıkartın mı?

/.git 
/Project 
/Project/SubProject-0 
/Project/SubProject-1 
/Project/SubProject-2 

ve depo oldukça kaydedilmesini vardır. Şimdi alt projelerin (SubProject-0) biri oldukça büyüyor ve SubProject-0'ı alıp bağımsız bir proje olarak kurmak istiyorum. SubProject-0 ile ilgili tüm taahhüt geçmişini ana git deposundan ayıklamak ve yeni bir dosyaya taşımak mümkün mü?

+2

Bunun bir http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository kopyası olduğunu unutmayın (Jim DeLaHunt'ın cevabında söylediği gibi). –

cevap

36

Sana Deponun bir klon içinde

git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all 

gibi bir şey gerek http://git-scm.com/docs/git-filter-branch

bakınız.

+0

Teşekkürler! ÇALIŞIYOR bir cazibe gibi! – Rio

+2

@Rio Ayrıca, “Project-SubProject-0” seçeneğine dokunan işleri açmak için '-prune-empty 'seçeneğini de kullanmak isteyebilirsiniz. –

+0

Vay mükemmel çalışıyor! teşekkürler – alvatar

1

Benzer bir şey yapmam gerekiyordu, ancak bir alt projeyi bir repodan diğerine taşımak istedim. Benim yaptığım şey, herhangi bir kaynaktan nesneyi alabildiğinden getirmeyi kullanmaktı.

Temel olarak, yeni bir şube oluşturdum, o dalda gereksiz olan şeyleri sildim, daha sonra bir repodan diğerine geçmek için git getirmeyi kullandım. Nesneleri aldığımda, birleştirme hile yaptı.

E.g.

cd /path/to/other/repository 
    git fetch /path/to/source/repo temp:temp 

sıcaklığı: Geçici araçları

git checkout -b temp master 
    git rm -r Unneeded_stuff 
    git commit -m 'pruning' 

Sonra (ilgisiz) tamamen farklı birine tek deposundan bu kolu getirebilir: Orijinal şeyler vardır depo üzerinde

msgstr "kaynağında sıcaklığı getir ve buraya geçici olarak kaydet". Buradan sonucu ustanıza birleştirebilirsiniz.

git merge temp 

Sen o zaman hiç orijinal repo ile birleştirmek istediğiniz bir şey değil birinci durumda beri, geçici şube silebilir ve ikinci durumda bunu birleştirdik.

Bu adımların biraz sıkıştırılabileceğine eminim, ancak bu set güzel ve açık görünüyor.

+0

Eski bir yazıyla ilgili sizi rahatsız ettiğim için özür dileriz, ancak bu OP'den daha yararlı ama farklı bir soruyu yanıtlıyor. Bu cevap için yeni bir q/a çifti oluşturabilir misiniz? Bulmak çok daha kolay olur. – tacaswell

+0

ve sadece taşımak istediğiniz dosyaları içeren geçici bir depo oluşturmak için filtre yöntemini kullanmak ve daha sonra geçici depoda birleştirme adımı yapmak daha iyi olurdu, çünkü bu şekilde hala orijinal repo tarihinin tam bir geçmişi vardır (sadece son işlem olarak bir silme adımı ile). – tacaswell