2011-03-23 11 views
15

Bugfix şubelerimi yönetmek için git-svn kullanıyorum, ancak SVN repo'yu doğrudan incelediğimde, bunların da işlendiğini görebiliyor olsam da, değişmemiş değişiklikler yaptığımı söylüyor. Bu, hata düzeltmesinin rebase'in dalı birleştirildiği gibi ayarlamaması gibi.git, rebasing sonrası bir dalın birleştirilmediğini belirtiyor - neden?

Neyi yanlış yapıyorum burada?

git checkout -b fix_bug_1234 

git add . 
git commit -m "first change" 
git add . 
git commit -m "second change" 

git rebase -i HEAD~2 // squash the two changes together 

git svn rebase // fetch any changes from svn 

git checkout master 
git rebase fix_bug_1234 
git svn dcommit 

git branch -d fix_bug_1234 
error: The branch 'fix_bug_1234' is not fully merged. 

cevap

27

Bunun sebebi, git rebase'un taahhüt nesnelerini değiştirmesidir. Yani asıl içerik (veya fark), rebased taahhütlerle aynıyken, farklı bir ebeveyne atıfta bulunurlar ve farklıdırlar.

Bu şekilde git branch -d, bu işlemlerin değişikliklerinin diğer bazı hesaplarda içerildiğini doğrulayamıyor. Silme işlemini zorlamak için git branch -D (büyük harf D) kullanmanız gerekir.

Bir yan notta: git svn dcommit, rebasing ile aynı etkiye sahiptir. dcommit, taahhütleri SVN sunucusuna iterken, daha sonra da taahhütleri tekrar SVN sunucusundan alır. Yani ittiğinden farklı nesnelerle sonuçlanırsınız. İçerikte özdeş olmalarına rağmen (çakışmalarınız olmadıkça), hala farklıdırlar (ana neden, git svn, taahhütün ait olduğu SVN sürümünü belirten taahhüt mesajına bir satır eklemesidir).

+0

Çok iyi cevap, dcommit'i açıkladığınız için teşekkürler! –

3

İşte böyle bir şeyi böyle yapıyorum ve işe yarıyor. Kullanıcı kurgusunun cevabı git rebase'in neden istediğini yapmıyor olduğunu açıklıyor.

git rebase -i HEAD~2 // squash the two changes together 

git svn rebase // fetch any changes from svn 
git svn dcommit // you can commit to SVN from any branch 

git checkout master 
git svn rebase 
git branch -d fix_bug_1234 
+0

Eh, rebase kendisi istediğim şeyi yapıyor. Sadece değişmemiş bir şekilde değiştiğimi söylediğini görmek biraz korkutucu! İş akışı ipuçları için teşekkürler. –

+0

Yeniden düzenleme, dosyalarınızın içeriğine istediğiniz şeyi yapıyor. SVN'den tam bir taahhüt ağacını korumaya devam etmiyor, bu yüzden gerçek anlamda bir taahhütte bulunmuyorsunuz. Sadece aynı dosya içeriğine neden olurlar. –

İlgili konular