Bir Şubeyi Trunk'ta Birleştirme


125

SVN ile ilgili tuhaf bir sorunla karşı karşıyayım merge. Bir geliştirici dalından gövdeye birleşmek istiyorum. Aynı anda gövdeyi kesen birden fazla geliştirme dalımız var.

Şu komutla bu dallardan birini gövdeye birleştiriyorum:

svn merge trunk branch_1

Bu dalın parçası olmayan, gövdede birleşen değişiklikler görüyorum. Neyi yanlış yapıyorum ?

SVN Sürümü:

Subversion komut satırı istemcisi, sürüm 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32.


7
Bunun bir cevap olmadığını biliyorum, ancak aynı anda birkaç aktif şubeniz varsa, muhtemelen mercurial veya git'e geçseniz iyi olur. Ps: Fanatik değilim, svn ile ~ 7 yıldır çalışıyorum ;-)
zerkms

2
Ne avantajı var? Git veya mercurial'a geçmek neden daha iyi bir seçimdir?
Vanchinathan Chandrasekaran

3
çünkü git ve mercurial , şubeleri çok daha iyi destekliyor. Avantajlar: Bu tür sorular sormayacaksınız ve şube oluşturma ve sürdürme konusunda daha az baş
ağrınız

Yanıtlar:


215

Söz svn mergediziminiz yanlış.

Çalışan bir kopyasını trunkkullanıma almak ve ardından şu svn merge --reintegrateseçeneği kullanmak istiyorsunuz:

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

Daha fazla ayrıntı için birleştirme hakkındaki SVN kitabı bölümüne bakın.


Yazıldığı sırada bunun doğru cevap olduğunu (ve kabul edildiğini), ancak her şeyin ilerlediğini unutmayın. Topek ve http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate yanıtlarına bakın


4
--reintegrate seçeneği zorunlu değildir, dallanma (1.6'da) herhangi bir hedef ile istenilen sayıda birleştirilebilir
Lazy Badger

1
Gerçekten mi? Aynı değişiklik setlerini yeniden riske atmadan mı? Lütfen bunu doğrulayan kanıtlara bir bağlantı verebilir misiniz?
Neutrino

--reintegrategerçekten zorunlu değildir, ancak bu durumda gerçekten tavsiye edilir. Bunu onsuz yapmaya çalıştım --reintegrateve yüzlerce çatışmayla sonuçlandım. İle --reintegrate, çatışma yok ve her şey iyiydi!
tibo

17
--reintegrateSeçenek basit ve etkilidir ANCAK kez" belirtmek gerekir --reintegratebirleştirme gövdesine daldan yapılır, şube artık daha fazla çalışma için kullanılabilir. Doğru yeni gövde değişiklikleri absorbe O değil edebiliyor, ne de düzgün yeniden entegre edilebilir tekrar bagaja. " bağladığınız kitapta açıklandığı gibi.
Pino

3
@daveL, gövdeden şubeye ileriye doğru birleşmeler bana mantıklı geliyor. Bununla birlikte, "yeniden derecelendirilmiş bir dalı canlı tutmak" için gelişmiş bir özellik buldum (bkz. Stackoverflow.com/a/10163059/685806 ), ayrıca daha yeni istemci sürümleri tarafından otomatik olarak uygulanır.
Pino

78

Çalışma dizininiz ana hattı gösteriyorsa, şubenizi aşağıdakilerle birleştirebilmelisiniz:

svn merge https://HOST/repository/branches/branch_1

bu komutu bagajınızın kök dizininde verdiğinizden emin olun


7
SVN 1.8'den itibaren. Bu doğru cevap. Subversion.apache.org/docs/release-notes/… sayfasına
GreenAsJade

@blahdiblah kod pasajında ​​çok fazla yabancı bilgi var. Çalışmaların özetinin, bir çalışmanın diğer bölümlerinden daha fazla okunmasının bir nedeni var. Aynısı UX testi, hemen çıkma oranlarını en aza indirme vb. İçin de geçerlidir. Hepsi aynı prensiptir.
ahnbizcad

1.7 ile --reintegrate seçeneği olmadan birleşebilir ve şubede geliştirmeye ve birleşmeye devam edebilirsiniz. Ne yazık ki 1.8 bunu bir yeniden entegrasyon olmaya zorlayacak ve bunu önlemenin bir yolu yok gibi görünüyor. Bu, birleşir birleştirmez, korkunç "canlı tutma dansından" geçmeden dalı kullanamayacağınız anlamına gelir
John Little

3
Birleştirmeden sonra bagajın çalışan kopyasını depoya geri göndermeyi unutmayın!
John

16

Bagajda bir svn güncellemesi yapın, revizyon numarasını not edin.

Bagajdan:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

Bir svn günlüğü yaparak dalın bagajdan nerede kesildiğini kontrol edebilirsiniz.

svn log --stop-on-copy

Aynı anda canlı olan birden fazla geliştirme dalı olduğu için bu benim için de çalışmıyordu, bu komut diğer dallardan da değişiklikler çekiyordu. Bu SLik SVN istemcisi ile ilgili bir sorun olabilir mi?
Vanchinathan Chandrasekaran

Bu yanlış olmasa da, daha yeni sürümleriyle svn(OP'nin kullandığı gibi) birleştirmenin daha kolay yolları vardır .
blahdiblah

@VanchinathanChandrasekaran, şube adını belirttiğiniz komutta svn://path/to/branch/branchName, diğer şubelerden değil yalnızca o şubeden yapılan değişiklikleri çekmelidir . Öyleyse tehlikedeyiz!
Fredrick Gauss

1

Sözdizimi yanlış, bunun yerine

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.