2012-04-26 20 views
8

Yani iki git reposum var. Birincisi bizim çerçevemizdir (db soyutlama, fonksiyonlar düşünün) ve yeni projemiz için başka bir git repo.Git depoları nasıl yuvalanır; Getir ve birleştirme

ben proje GİT'e çerçeve git repo dahil etmek istiyoruz ve GitHub Yardım'a göre, bu çalışması gerekir: Ben birleştirme yaptığınızda

cd /project 
git remote add framework git://github.com/username/Framework.git 
git fetch framework 
git merge framework/master 

sorun, bu tüm dosyaları her şeyi getiriyor çerçeve ve basitçe onları projenin köküne döker. Bunun yerine, çerçeve dosyalarını /project/framework/ gibi bir alt dizine nasıl dahil edebiliriz?

cevap

20

Git'in submodule desteğine bakmak isteyebilirsiniz. Bir alt modül, bir git deposunu başka bir git deposuna yerleştirmenize izin verir. Bu tür şeyler için alternative solutions var, ama onları ben kullanmadım.

örneği şöyle olabilir: Eğer alt modüllerinin bir depo klonlama ise

$ git clone git://github.com/username/project.git 
$ cd project 
$ git submodule add git://github.com/username/framework.git framework 
$ git commit -m "added framework submodule" 

, sen --recursive seçeneğini kullanmanız gerekir:, düzenli klonlayabilirsiniz

$ git clone --recursive git://<repository-with-submodules>.git 

Veya alternatif ve sonra çalıştırın:

$ git submodule init 
$ git submodule update 

Bağlantılı belgeyi okuyun (ve git submodule --help) Daha fazla bilgi için. değişiklikler altmodülün yapılırsa

, bu gibi onları getirmek:

# first update the submodule just like any other git repository 
$ cd project/framework 
$ git pull 

# now you have to record the new commit in the parent repository 
$ cd .. 
$ git commit -m "updated framework submodule" 

Son adım gereklidir git (belirli bir alt modülün ilişkili kesinleştirme belirli bir kaydını tutar çünkü zaman herkes böylece ebeveynleri klonlar; alt modülün en güncel düzeltmesinden ziyade, alt modülün bu sürümünü alırlar; bu, üst havuzda tasarlandığı şekilde çalışmasını engelleyecek değişiklikleri sonlandırabilirdi). Bu nedenle, alt modülü güncellerseniz, yeni işlemi ebeveynte kaydetmeniz gerekir.

framework alt modülünde değişiklik yaparsanız, başka bir depoda yaptığınız gibi tekrar yalnızca git push olur. Daha sonra ana revizyonda yeni revizyon gerçekleştirmeniz gerekir.

+0

Kusursuz, bu yüzden Framework’e değişiklikler yapıldığında, bunları bir modülüne şimdi nasıl projeye çekebilirim? Ayrıca, proje yerine Framework'de değişiklikler yaparsam, bunları Framework git repo'ya nasıl geri götürebilirim? – Justin

+0

Cevabımı güncelledim. – larsks

+0

Bir küçük not. Alt modül HEAD'ı ayrılır, böylece alt modülde değişiklik yapmaya dikkat etmeniz gerekir. Bir şube oluşturun (ya da bir şubeye geçin), değişiklikleri yapın, işleyin ve sonra itin. – GoZoner

İlgili konular