Subversion ile Kısmi Taahhütler


104

Vaka göz önüne alındığında yaptığım iki bağımsız değişiklikleri içinde bir örnek: Dosya. yeni bir yöntem ekledi ve başka bir yöntemi değiştirdi.

Genellikle her iki değişikliği de tek bir taahhüt olarak değil, iki bağımsız taahhüt olarak uygulamak istemiyorum .

Git deposu ben kullanırım İnteraktif Modu ait git-add (1) bölmek için öneriyormus küçük olanları içine:

 git add --patch

Bunu Subversion ile yapmanın en kolay yolu nedir? (Belki bir Eclipse eklentisi kullanarak bile)

Güncelleme:
In Git Hakkında Thing , Ryan çağırır: “Tangled Çalışma Kopya Sorunu”


Özellikle komut satırında bir çözüm mü arıyorsunuz? Aşağıdaki yanıtların birçoğu, yalnızca bir Tortoise özelliği olan - yani GUI ve Windows tabanlı olan - TortoiseSVN 'işlemden sonra geri yükle'den bahsediyor.
florisla

Yanıtlar:


35

Git-svn ile uzak SVN deposunun yerel bir GIT deposunu oluşturabilir, onunla tam GIT özellik setini kullanarak çalışabilir (kısmi kayıtlar dahil) ve ardından hepsini SVN havuzuna geri gönderebilirsiniz.

git-svn (1)


25
Bu çözümde belirli bir ironi var.
tuxayo

65

Tortoise SVN 1.8 artık bunu "İşlemden sonra geri yükle" özelliğiyle . Bu, kaydetmeden sonra tüm düzenlemeler geri alınarak bir dosyada düzenlemeler yapmanıza olanak tanır

Belgelere göre:

Dosyanın yalnızca belirli bir sorunla ilgili kısımlarını işlemek için:

  1. kaydetme iletişim kutusunda dosyaya sağ tıklayın, "tamamladıktan sonra geri yükle" yi seçin
  2. dosyayı örneğin TortoiseMerge'de düzenleyin: henüz uygulamak istemediğiniz değişiklikleri geri alın
  3. Dosya 'yı kaydet
  4. dosyayı işle

Bunun nasıl çalıştığını merak ediyorum. SVN 1.8 sürüm notlarını kontrol ettim , ancak "İşlemden sonra geri yükle" özelliğinin hangi özelliğe dayandığını bulamıyorum.
DavidS

3
@DavidS Bu, SVN'nin bir özelliği değildir. Bu, TortoiseSVN'nin bir özelliğidir.
florisla

Bilginize, SVN 1.8, Nisan 2018'den itibaren 1.10
Greg K

Ayrıca buradaki belgelerde de bulabiliriz: tortoisesvn.net/docs/release/TortoiseSVN_en/…
Guillaume Husta

42

Bunu TortoiseSVN kullanarak yaptım .

Yerleşik birleştirme yardımcı programı, depo sürümü ile çalışan kopyanız arasında bir fark göstermenize olanak tanır.

Diff yardımcı programının yedekleme oluşturma işlevini kullanın

  1. Dosyanızı tüm değişikliklerinizi yapacakmışsınız gibi işleme alın.
  2. Kaydetme penceresinde, bir fark göstermek için dosyaya çift tıklayın.
  3. Fark ayarlarında, orijinal dosyayı yedekleme seçeneğine tıklayın .
  4. İstemediğiniz değişiklikleri sağ tıklayın ve diğer metin bloğunu kullan seçeneğini kullanın .
  5. Farkı tam olarak bir kez kaydedin . Her kaydettiğinizde yedeğin üzerine yazılacaktır. Bu yüzden sadece bir kez tasarruf etmek istiyorsunuz.
  6. Değişikliği taahhüt edin.
  7. Oluşturulan .bak dosyasıyla orijinalin üzerine yazın (tüm orijinal değişikliklerinizi içerecektir).
  8. Dosyanı teslim et.

Artık tüm değişikliklerinizi iki ayrı kaydetme kullanarak yapmalısınız.


1
Bunu tam olarak nasıl yaptın? Bu tekniği öğrenmekle ilgilenirim.
Lasse V. Karlsen

Bu, bir kaydetmeden sonra .bak dosyalarının üzerine otomatik olarak yazılsa çok düzgün olur.
BCS

Tortoise SVN 1.8.1 kullanarak adım 3: Yedekleme seçeneğini
bulamadım

4
Boşver. 1.8 tortoisesvn.net/tsvn_1.8_releasenotes.html için karşılık gelen bağlantı bulundu Dosyanın yalnızca belirli bir sorunla ilgili kısımlarını işlemek için: kaydetme iletişim kutusunda, dosyaya sağ tıklayın, "kaydettikten sonra geri yükle" yi seçin, dosyayı düzenleyin Örneğin, TortoiseMerge: uygulamak istemediğiniz değişiklikleri geri alın, ancak dosyayı kaydedin dosyayı kaydedin
sudhAnsu63

Ne yazık ki, bu ne Tortoise 1.8.5 sürümünde mevcut görünmüyor, ne de "işlemden sonra geri yükle".
kajaco

24

Kullanmayı deneyin, svn diff > out.patchardından out.patchdosyayı kopyalayın out.patch.addveout.patch.modify

Yalnızca çalışan bir yama dosyanız olduğunda orijinal dosyayı geri alın.svn revert out.c .

Yama dosyalarını elle düzenleyin , böylece sadece eklemek veya değiştirmek için parçalar içerecekler . Bunları patchkomutu kullanarak orijinal dosyaya uygulayın , eklemenin işe yarayıp yaramadığını test edin, ardındansvn commit eklemeyi.

Yıkama durulama tekrarlayın out.patch.modifyYama .

İlk sorunuzda belirtildiği gibi değişiklikler dosyada ayrı ise - yeni bir yöntem eklendi, mevcut bir yöntemi değiştirdi - bu işe yarayacaktır

Bu çok sıkıcı bir çözüm - taahhütlerinizi ayırmak için herhangi bir nedeniniz olması gerektiğine ikna olmasam da.

Çalışmanızı aşağıdakilere karşı uygulamak için aynı kaynağın birden fazla çalışan kopyasını da kontrol edebilirsiniz:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Emin olun svn upher şey emin olmak için ve test.


11

Bu, v1.8'den beri TortoiseSvn (Windows) kullanılarak mümkündür.

4.4.1. Kaydetme İletişim Kutusu

Çalışan kopyanız güncelse ve herhangi bir çakışma yoksa, değişikliklerinizi yapmaya hazırsınız. Kaydetmek istediğiniz herhangi bir dosya ve / veya klasörü seçin, ardından TortoiseSVN → Commit ...

<snip>

4.4.3. Dosyaların yalnızca bazı kısımlarını kaydet

Bazen bir dosyada yaptığınız değişikliklerin yalnızca bazı kısımlarını uygulamak istersiniz. Böyle bir durum genellikle bir şey üzerinde çalışırken meydana gelir, ancak daha sonra acil bir düzeltme yapılması gerekir ve bu düzeltme, üzerinde çalıştığınız dosyada olur.

dosyaya sağ tıklayın ve Bağlam Menüsü → İşlemden sonra geri yükle seçeneğini kullanın. Bu, dosyanın olduğu gibi bir kopyasını oluşturacaktır. Daha sonra, örneğin TortoiseMerge'de dosyayı düzenleyebilir ve uygulamak istemediğiniz tüm değişiklikleri geri alabilirsiniz. Bu değişiklikleri kaydettikten sonra dosyayı teslim edebilirsiniz.

İşlem tamamlandıktan sonra, dosyanın kopyası otomatik olarak geri yüklenir ve geri yüklenmemiş tüm değişikliklerinizi içeren dosyaya sahip olursunuz.

Linux'ta, http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php'ye bir şans verirdim. Yine de kendim denemedim.


8

Bunu yapardım:

  • Editörümde (vim kullanıyorum), dosyayı değişikliklerden sadece biri görünecek şekilde düzenleyin
  • Dosyayı kaydedin (ancak düzenleyiciden çıkmayın)
  • Değiştirilen dosyayı svn olarak kaydet
  • İkinci değişiklik grubunun yeniden görünmesi için düzenleyicide "geri al" ı yeterince kez basın
  • Dosyayı tekrar kaydedin
  • İkinci değişiklik grubunu uygulayın.

Bu, bir dizi değişikliği geri almanın makul ölçüde kolay olduğunu varsayan basit bir yaklaşımdır. Daha karmaşık durumlar için, endişelenmeden her iki değişikliği de bırakırdım.

Artık git'i kullandığıma göre, umarım bir daha asla yapmak zorunda kalmayacağım bir şey!


4

Ya yerel bir darcs deposu kullanıyorum ya da değişiklikleri kademeli olarak birleştiriyorum. Birleştirme ile (opendiff, Xcode ile birlikte gelen bir birleştirme programı olan FileMerge'i açar; favori birleştirme aracınızla değiştirin):

cp file file.new
svn revert file
opendiff file.new file -merge file

ilgili değişiklikleri birleştirin, birleştirmeyi kaydedin, birleştirme programından çıkın

svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file

dosyada birden fazla ilgisiz iri parça varsa, durulayın ve tekrarlayın (ama taahhütte bulunmadan önce neden bu kadar uzun süre beklersiniz ?!)

Ayrıca git'i biliyorsanız, git-svn'i yerel bir git deposu tutmak ve işlemlerinizi bir svn ana sunucusuna eşitlemek için kullanabilirsiniz; sınırlı deneyimimde harika çalışıyor.


9
Re: "Neden bu kadar uzun süre bekliyorsunuz?" Bütün gün büyük bir yeniden düzenleme yapıyorsunuz ve patron öğle yemeğinden hemen önce küçük bir düzelt-bu-şimdi-bug-bug'ını düşürüyor.
BCS


2
  1. Bölmek istediğiniz tüm dosyaları tercih editöründe açın
  2. Farklı bir araç seti kullanarak (Win'de Spike'ın önerisini (eski sürüm) kullanın) ikinci seti geri alın
  3. Kaydet
  4. tercih editörünüze geri dönün ve tüm dosyaları kaydedin

Spike'ın tüm önerisinden biraz daha riskli ama yapılması daha kolay olabilir. Ayrıca, önce başka bir şey üzerinde denediğinizden emin olun, çünkü bazı editörler siz o dosyayı yeniden yüklemedikçe (tüm değişikliklerinizi kaybetmeden) altından değişen bir dosyanın üzerine kaydetmeyi reddedecektir.


0

Bence diff dosyaları oluşturmaktan, geri döndürmekten daha kolay bir seçenek, deponun iki kopyasını kontrol etmek ve birinden diğerine gövdeleri kopyalamak için DeltaWalker gibi görsel bir diff aracı kullanmak olacaktır.

İlk kopya, üzerinde gerçekten çalıştığınız kopya olacaktır ve ikincisi sadece bu amaç için olacaktır. İlkinde tonlarca değişiklik yaptıktan sonra, bir bölümü ikinciye kopyalayabilir, işleyebilir, başka bir bölümü kopyalayabilir, işleyebilirsiniz, vb.


0
  1. İlgili tüm değiştirilmiş dosyaları yedek kopyalara kopyalayın.
  2. Kullanarak çalışma durumu için bir yama oluşturun svn diff .
  3. Kullanarak dosyaları geri döndürün svn revert .
  4. Yamanın taahhüt etmek istediğiniz kısımlarını yeniden uygulayın. patch aracı veya manuel düzenleme veya herhangi bir şekilde yeniden uygulayın.
  5. Çalıştırmak diffYama parçalarını doğru uyguladığınızdan emin olmak için çalışma kopyanızı yedeklemenizle karşılaştırmak için daha sonra .
  6. Oluşturun ve test edin.
  7. Kaydet.
  8. Yedek kopyalarınızı arşiv kontrolünüze geri kopyalayın.
  9. Tamamlanana kadar 2'de (1'de değil!) Tekrarlayın.
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.