2009-07-17 12 views
14

İki kod tabanım var, Code base-1, Code Base-2. Her iki depoları (dizinleri) içinde İki Git deposunu benzer içerikle birleştirebilirim, ancak herhangi bir ataları paylaşamaz mıyım?

Ben komutları çalıştırın

...
git init 
git add . 
git commit -m "Initial Commit" 

....

Kod tabanı-1 ile kod tabanı-2 arasında kod farklılıkları vardır.

Zaten onları% 0,1'lik farklılıklar içerdiğinden, bu dosyaları kullanamıyorum. Dosya adları aynıdır ancak kodda bazı ufak düzenlemeler vardır.

İki depo arasındaki farklılıkları birleştirmenin bir yolu var mı?

Düzenlendi: Örneğin

, bu reklam takipçileriniz var diyelim. Başladığım şey bu. Biraz daha yeni olduğu için kod temeli 1 ve 2

[oldest code case] 
code-base-1/ 
code-base-1/.git [git stuff with already created repo] 
code-base-1/file1 
code-base-1/file2 

code-base-2/ 
code-base-2/.git [git stuff with already created repo] 
code-base-2/file1 
code-base-2/file2 

İdeal arasındaki küçük farklar vardır, ben kod temeli-2 silebilir.

Bu kod tabanlarını nasıl birleştiririm, böylece birleştirilmiş dosyalar ile en sonunda biriyle çıkarım?

cevap

7

olabilir olmasından kaynaklanır Sorun, bu (farklı SHA-1, birinci düğüm ile), iki farklı veri havuzu vardır ve tek bir Repo klonlanmış ve daha sonra modifiye edilmiş.
Yani 'git fetch' muhtemelen yeterli değil demektir.

Sadece CB2 içeriği birleştirmek (yani kalk harici) harici bir araç kullanabilirsiniz WinMerge gibi CB1 içine (Kod-Baz-2), soruya "Merging in changes from outside a git repository" önerildiği üzere.

Diğer seçenek bir getirme tamamlanması biraz greft tekniği kullanılarak olacaktır: sorusunu "Can two identically structured git repos be merged when they have never had any common history?"

$ cd project1 
$ git config remote.project2.url /path/to/project2 
$ git config remote.project2.fetch 'refs/heads/*:refs/project2/*' 
$ git fetch project 

bkz Artı project1 için Project2 ait kaydedilmesini bağlamak için greft dosyası (.git/info/grafts) değiştirin.

-2

Tanımladığınız ilk depoyı oluşturun.

ikinci klasöründe içeriği ile ".git" adlı bir dosyası oluşturmak: Artık git içinde birleştirmek için vb işlemek/eklemek git diff çalıştırabilirsiniz

gitdir: <path-to-first-repository>/.git 

ikinci depo olarak sizin değişir.

+0

Biraz daha spesifik olabilir. Örneğin, aşağıdakilere sahip olduğumu varsayalım. Başladığım şey bu. Codebase 1 ve 2 arasında küçük farklar vardır. [en eski kod örneği] code-base-1/ code-base-1 /.Git [zaten oluşturulan repo ile şeyler] code-base-1/file1 code-base-1/file2 code-base-2/ code-base-2/.git [zaten oluşturulan repo ile şeyler] code-base-2/file1 code-base-2/file2 İdeal olarak, kod-base-2'yi silebilirim çünkü biraz daha yeni. Bu kod tabanlarını nasıl birleştiririm? Böylece sonunda birleştirilmiş dosyalar ile biriyle çıkıyorum. –

+0

Bu yorum düzgün şekilde biçimlendirilmemiş, yukarı bakın. –

4

Dene:

cd code-base-1 
git fetch ../code-base-2 master:code-base-2 
git merge code-base-2 
+0

Bu, aynı projenin iki farklı versiyonu gibi farklı projelere katılacaktı (eğer ortak bir ortak kursu yok ise). –

İlgili konular