TortoiseSVN'yi kullanarak, değişiklikleri gövdeden bir dala ve tam tersi şekilde nasıl birleştirebilirim?


132

Subversion ile mükemmel ve ücretsiz Sürüm Kontrolü kitabını kullanarak Subversion 1.5 ile dallanma / birleştirme hakkında okuyorum . En sık ihtiyaç duyduğum eylemleri gerçekleştirmek için Subversion komut satırı istemcisini nasıl kullanacağımı anladığımı düşünüyorum, bunlar:

Şube Trunk'tan Değişikliklerle Güncelle

Şubenin çalışma dizininden şunu çalıştırın:

svn birleştirme http://svn.myurl.com/proj/trunk

Şubeyi Trunk ile Birleştir

Bagajın çalışma dizininden şunu çalıştırın:

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

Ancak, Subversion için arayüz olarak TortoiseSVN 1.5 kullanıyoruz. TortoiseSVN ile bu işlemleri en iyi nasıl gerçekleştireceğimi bilmek isterim. Yeni iletişim kutusu, ana menüde üç farklı seçenek sunar.

  1. Bir dizi düzeltmeyi birleştirme
  2. Bir şubeyi yeniden entegre edin
  3. İki farklı ağacı birleştirin

Toplayabildiğim kadarıyla, TortoiseSVN her zaman svn'yi aşağıdaki sözdizimiyle çalıştırır.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

Ek olarak, bir dalı yeniden entegre etme, bazı hedeflerin birleştirilmediğini ve bu nedenle devam edemeyeceğini belirten bir mesajla başarısız oluyor ve bu nedenle 3 numaralı seçeneği kullanmak zorunda kaldım.

Sorularım:

  1. TortoiseSVN 1.5'i gövdeden dala yapılan değişiklikleri birleştirmek için nasıl kullanabilirim?
  2. TortoiseSVN 1.5'i reintegrate yöntemi ile veya bu yöntem olmadan dalı gövdeye birleştirmek için nasıl kullanabilirim?
  3. Her biri için yukarıdaki seçeneklerden hangisini kullanmalıyım ve neden?

DÜZENLE

"Kuru çalıştırma" testi sayesinde, Subversion komut satırının

svn birleştirme http://svn.myurl.com/proj/trunk

revizyon aralığını boş bıraktığım sürece, TortoiseSVN'deki 1 numaralı seçeneğe (Bir Revizyon Aralığını Birleştirme) benzer.


Bağlantılar bulunamadı! = /
Leonardo Costa

Yanıtlar:


28

Davranış, deponuzun hangi sürüme sahip olduğuna bağlıdır. Subversion 1.5, 4 tür birleştirmeye izin verir:

  1. kaynakURL1'i birleştir [@N] kaynakURL2 [@M] [WCPATH]
  2. kaynağı birleştir WCPATH1 @ N kaynağıWCPATH2 @ M [WCPATH]
  3. birleştirme [-c M [, N ...] | -r N: M ...] KAYNAK [@REV] [WCPATH]
  4. birleştirme --reintegrate SOURCE [@REV] [WCPATH]

1.5'ten önceki subversion sadece ilk 2 formata izin veriyordu.

Teknik olarak tüm birleştirmeleri ilk iki yöntemle gerçekleştirebilirsiniz, ancak son iki yöntem, 1.5'in birleştirme izlemeyi devralmayı etkinleştirir.

TortoiseSVN'nin seçenekleri, deponuz 1.5+ olduğunda bir aralığı veya revizyon haritalarını yöntem 3'e veya deponuz daha eski olduğunda bir yöntemle birleştirir.

Özellikleri bir sürüm / bakım dalında birleştirirken, 'Bir dizi revizyonu birleştir' komutunu kullanmalısınız.

Yalnızca bir dalın tüm özelliklerini bir ana dala (genellikle ana dala) geri birleştirmek istediğinizde, 'Bir dalı yeniden entegre et' kullanımına bakmalısınız.

Ve son komut -İki farklı ağacı birleştir- sadece normal dallanma davranışının dışına çıkmak istediğinizde faydalıdır. (Örneğin, farklı sürümleri karşılaştırmak ve ardından farklılığı başka bir dalla birleştirmek)


birisi bana stackoverflow.com/questions/51657636/… konusunda yardım edebilir mi ? Bu ekibimiz için önemli bir soru, etrafında bazı fikirlere ihtiyacımız var.
ankur

249

Diğer cevapları doğru bir şekilde takip edemedim, işte daha çok aptallar rehberi ...

Gidecek tersi bunu yapabilirsiniz trunk -> branchveya branch -> trunk. Her zaman önce trunk -> branchoradaki herhangi bir çatışmayı düzeltirim ve sonra birleştiririm branch -> trunk.

Bagajı bir dala / etikete birleştirin

  1. Dalı / etiketi kontrol edin
  2. Dalın köküne sağ tıklayın | Kaplumbağa SVN | Birleştirmek ...
  3. Birleştirme Türü: Bir dizi revizyonu birleştirme | Sonrakine tıkla' görüntü açıklamasını buraya girin
  4. Revizyon aralığını birleştir: Dal / etikete kopyaladığınız ana hat dizininin URL'sini seçin. Tüm revizyonları birleştirmek için alanı boş bırakmak veya birleştirmek için revizyonları girin | Sonrakine tıkla' görüntü açıklamasını buraya girin
  5. Birleştirme seçenekleri: Bunları varsayılan olarak bıraktım | "Birleştir" i tıklayın görüntü açıklamasını buraya girin
  6. Bu, revizyonları teslim alınan dal / etiketle birleştirir
  7. Sonra birleştirilmiş değişiklikleri dala / etikete uygulayın

4
"Birleştirmek için revizyon aralığı" nı atladım ve "Test Birleştirme" yaptım. İhtiyacım olan şey buydu: aralık benim için otomatik olarak ayarlandı (dalın yapıldığı zamandan şubedeki son revizyona kadar)
Lian

Harika cevap - kısa ve takip etmesi kolay. Benim için çalıştı, ancak sadece tek bir yapılandırma dosyasını birleştirmek istediğimde, nedense bunu iki kez yapmak zorunda kaldım. Şimdi her şey yolunda. Şerefe
Kanat

@Lian Aynı şeyi gövdeden dallara birleştirmek için yaptım; Devreden dosyaların en son sürümünün dal dosyalarıyla birleştirilmesini istiyorsanız revizyon aralığını boş bırakın.
Winger

2
Tortoise SVN'nin mevcut sürümü artık 4. adımda Revizyon aralığını boş bırakmak yerine tüm revizyonları birleştirme seçeneğine sahip.
The Unknown Dev

1
@Onkar Bazı çatışmalar neredeyse her zaman olacak. Eğer iki dalınız varsa, örneğin trunkve brancharasındaki değişiklikleri mümkün trunkolan branchen kısa sürede birleştirdiğinizden emin olmak çatışmaları olabildiğince önleyecektir. Bu birleştirdiğinizde anlamına gelecektir branchiçin trunkherhangi çakışma olmamalıdır.
icc97

12

"Bir revizyon aralığını birleştir" kullanmalısınız.

Devreden bir şubeye değişiklikleri birleştirmek için, dal çalışma kopyasının içinde "revizyon aralığını birleştir" i seçin ve ana URL'yi ve birleştirilecek başlangıç ​​ve bitiş revizyonlarını girin.

Aynısı, gövdede bir dalı birleştirmenin tersi şekilde.

--Reintegrate bayrağı hakkında, kılavuza buradan bakın: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate


1

Svnmerge.py'ye bir göz atın . Bu komut satırı, TortoiseSVN tarafından çağrılamaz, ancak daha güçlüdür. Gönderen SSS :

Geleneksel yıkım, değişiklikleri birleştirmenize izin verir, ancak zaten birleştirdiğiniz şeyi "hatırlamaz". Ayrıca, bir değişiklik kümesini birleştirilmekten hariç tutmak için uygun bir yol sağlamaz. svnmerge.py işin bir kısmını otomatikleştirir ve basitleştirir. Svnmerge ayrıca, birleştirdiği tüm şeylerden günlük mesajlarıyla bir commit mesajı oluşturur.


6
svnmerge.py, Subversion 1.4 ve öncesinde geliştirilmiştir. Subversion 1.5, temel üründe birleştirme izlemeyi getirdi.
Bert Huijben

0

Klasöre Shift-Sağ Tıklayın ve TortoiseSVN -> Tümünü Birleştir'i seçin

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.