2011-04-08 19 views
8

Git-svn dcommits ile ilgili bir sorun yaşıyorum;Git-Svn dcommit dallara ayrılmaya neden oluyor

Git ana branşmanının SVN deposunda her zaman gövdeyi izlediğinden emin olmayı denerim. Yani ne zaman çalışıyorum, konu dalındayım.

Buraya ana kadar

git checkout master 
git svn rebase #get any changes in svn 
git rebase master my-topic 
git merge my-topic --ff-only 

usta geri benim şube birleştirme istediğinize karar

git checkout -b my-topic 
git commit -m "blah blah blah" 

Sonra bir süre bir konu dalında çalışarak, her şey: İşte benim senaryo iyi gitti. Şimdi ana ve hızına ve taahhüt aynı işaret yukarıya my-konuyu her ikisine de sahip ve tüm geçmişi aşağıdaki gibidir:

A -- B -- C - master + my-topic 

Ancak, ben

git svn dcommit 

Ben ile bitirmek ne zaman şöyle bir ağaç (B ve C kaydedilmesini başlangıçta konuya yapılır):

Bu dcommit sürecinde gibi görünüyor
-- B -- C - my-topic 
/
A -- B -- C - master + remotes/trunk 

, git SVN kadar kaydedilmesini iter, sonra da üstüne geri yerine koymak onları usta. Benim düşündüğüm problem, farklı komiser bilgilerini almalarıdır. Kaplumbağa ve SSH anahtarıyla svn'ye giriş yapıyorum. svn itilmiş

Collin Hockey <[email protected]> 

Kesinleştirmeler olsa bu var:

chockey <[email protected]> 

var mı olarak SVN itilmiş edilmemiş git deposunda

Kesinleştirmeler committer bilgi var Bu dalları bölmeden nasıl koruyabilirim? Tekrar,

diyerek tamir edebilirim, ancak bunun gereksiz olması gerektiğini hissediyorum. Bununla ilgili temel sorun, bir şubenin değişiklikleri SVN'ye aktarıldığında, gitmenin şubenin herhangi bir yerde birleştirildiğini düşünmemesidir. Artık ihtiyacınız olmayan eski dalları silmeyi kafa karıştırıcı yapar.

cevap

10

git svn dcommit komut çalışmalarını taahhüt işaret:

  1. bul SVN'den gelen son taahhüt; en last-svn
  2. SVN'den HEAD
  3. last-svn için Güncelleştirme Reset ve ilgili
taahhüt oluşturmak (bu arada e-posta atarak) last-svn..HEAD Subversion aralığındaki hareketin Gönder diyelim

Diğer bir deyişle, SVN'ye gönderdiğiniz taahhütler yok edilir ve SVN güncellemesinden yeniden oluşturulur. SVN gelen kaydedilmesini Git ile oluşturulan olanlardan farklı olduğu için bu durum gerekir:

  • Onların açıklama
  • Onların yazar e-posta SVN kullanıcı adından hesaplanır SVN revizyon başvuru içeriyor

Bu nedenle, my-topic şubeniz master'dan farklıdır.

git svn dcommit yolunu, yazar e-postasını SV123 kullanıcı adıyla --authors-file ve --authors-prog seçenekleriyle hesaplayabilirsiniz.

+1

Bu biraz daha iyi çalışıyor gibi görünüyor, ancak işlemler hala farklı (Onlar da farklı zamanlarda var). Aslında onların yeni taahhütler olmasını engellemenin bir yolu var mı (ya da her iki şubede de otomatik olarak güncellemeleri güncellemelisin), yoksa bunlar git-svn köprüsünü kullanmanın sonu mu? – Collin

+2

@Collin Git-svn'nin çalışması budur: SVN taahhütleri sağlar ve Git bunları sadık şekilde yansıtır. Bu davranışı değiştirmenin bir yolu yoktur (elbette kendi Git-SVN senkronizasyon aracınızı yazmanız dışında). –

+1

Bilgi için teşekkürler. Ben dcommit-ing sonra şubemde rebasing yapıştıracağım. Yazarlar dosyaları, tarihimi çok daha güzel hale getiriyor olsa da :) – Collin

3

Haklısınız, bu git svn'den tekrarları tekrarlar. git şubeleri yalnızca taahhütler (veya orada ids/hashes) için işaretçilerdir.svn den kaydedilmesini farklı karmaları sahip olacak ve sadece henüz kontrol şube git svn dcommit tarafından güncellenir, bu nedenle konu şube hala aşağıdaki gibi eski

İlgili konular