2010-02-24 20 views
10

Aşağıdaki proje kurulum var:Yeniden bir git Repository bir kısmı

  • Solution A
    • Project 1 (hafif bileşeni)
    • Project 2
    • (dosyaların bir sürü içerir ve Project 1 bağlıdır)

Solution A, tek bir git deposudur. Sonra başka bir çözüm oluşturdum ve Project 1'un işlevselliğini yeniden kullanabileceğimi ve hatta güncelleyebileceğimi keşfettim. Yani benim ikinci çözüm muhtemelen bu şekilde görünecektir:

  • Project 1

    • Solution B (paylaşılması gereken!)
    • Project 3 (Project 1 bağlıdır).

Şimdi Project 1 paylaşılan bileşen haline gelmesini istiyoruz. Yani, Project 1 kaynak kodunu her iki çözümden (A veya B) her değiştirdiğimde, buna göre güncellemek için diğerine ihtiyacım var.

Belki bu git ait alt modül özelliği ilgisi var. Bununla birlikte, kullanabildiğim tek yol, Solution A'un tamamını Solution B için bir altmodül olarak belirtmektir. Bu gerçekten Solution A muazzam boyutundan dolayı istediğim şey değil. Alt modül olmak için sadece küçük bir parçasına ihtiyacım var.

svn'da mümkün olduğunu ve tam olarak anlattığım gibi çalıştığını biliyorum: svn:externals özelliğindeki bir dış depo içinde bir dizin belirtin.

Bu konuda herhangi bir ipucu var mı? Ya da belki bir şey mi eksik?

cevap

7

, Senin durumunda

(nature of submodules bakınız) ideal çözüm SolutionA Git repo Project1 ayıklamak olacaktır:
How to extract a git subdirectory and make a submodule out of it? bakınız.

Ama bu bazı insanlar ondan çekerek eğer sen zaten yayınlanmış ve varsa bir sorun SolutionA geçmişini, yeniden içerir. ekstraksiyon işlemi için filter-branch kullanılması

.

Böylece
git filter-branch --subdirectory-filter Project1 -- --all 

sen, örneğin bir bir kütüphane alt dizini açabilirsiniz:

diğer tüm geçmişini kendi proje kök olmuştu Project1/ sanki bakmak için depo yeniden yazmak ve silmek için kendi deposu. filter-branch seçeneklerini revizyon seçeneklerinden ayıran -- ve tüm dalları ve etiketleri yeniden yazmak için --all'u not edin. Sonra SolutionB bir altmodülün olarak Project1 beyan

:

cd SolutionB 
git submodule add /path/to/Project1 Project1 

NOT: SolutionB yayınlamayı düşünüyorsanız burada yerel URL'ler kullanmayın!

git commit -m "Add submodules Project1" 
0

Bölünmüş Projesi 1 kendi deposuna dışarı ve Çözüm A ve Çözüm B. ikisinin bir alt modül yapmak

Bu kesinlikle submodules ilişkilidir
İlgili konular