it-swarm-tr.com

Subversion ile kısmi taahhütler

Yaptığım durum göz önüne alındığında iki bağımsız değişiklik in one dosyası: eg. yeni bir yöntem ekledi ve başka bir yöntemi değiştirdi.

Genellikle her iki değişikliği de one commit olarak, ancak two bağımsız olarak taahhüt etmek istemiyorum.

Git deposunda hunk öğesini daha küçüklerine bölmek için Interactive Mode / git-add (1) komutunu kullanırdım:

 git add --patch

Subversion ile bunu yapmanın en kolay yolu nedir? (Belki bir Eclipse eklentisi kullanıyorsanız)

Güncelleme:
İçinde Git Hakkında Şey , Ryan diyor: “Karışık Çalışma Kopyası Sorunu.”

96

Git-svn ile uzak SVN deposunun yerel bir GIT deposunu oluşturabilir, GIT özellik setinin tamamını (kısmi taahhütler dahil) kullanarak onunla çalışabilir ve daha sonra hepsini SVN deposuna geri itebilirsiniz.

git-svn (1)

32
jkramer

Kaplumbağa SVN 1.8 şimdi destekliyor bunu "Taahhüt ettikten sonra geri yükle" özelliği ile birlikte. Bu, bir düzenlemede tüm düzenlemelerin geri alınmasından sonra düzenlemeleri yapmanızı sağlar

Doküman başına:

Dosyanın yalnızca belirli bir sorunla ilgili kısımlarını taahhüt etmek için:

  1. kesinleştirme iletişim kutusunda, dosyaya sağ tıklayın, "kesinleştirmeden sonra geri yükle" yi seçin
  2. dosyayı düzenleyin, ör. TortoiseMerge: Henüz taahhüt etmek istemediğiniz değişiklikleri geri alın
  3. dosya 'yı kaydet
  4. dosyayı işlemek
58
Casebash

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östermenizi sağlar.

Diff yardımcı programının yedek oluştur işlevini kullanın

  1. Dosyanızı, tüm değişikliklerinizi taahhüt etmiş gibi kabul edin.
  2. Büyük pencerede, bir fark göstermek için dosyayı çift tıklayın.
  3. Diff ayarlarında, orijinal dosyayı yedekle seçeneğine tıklayın. 
  4. İstemediğiniz değişiklikleri sağ tıklayın ve diğer metin bloğunu kullan seçimini kullanın.
  5. Farkı aynen bir kez kaydedin. Her kaydettiğinizde yedeklemenin üzerine yazılacaktır. Bu yüzden sadece bir kere tasarruf etmek istiyorsun.
  6. Değişikliği yap.
  7. Oluşturulan .bak dosyasıyla orijinalin üzerine yazın (tüm orijinal değişikliklerinizi yapar).
  8. Dosyanızı tamamlayın.

Şimdi iki değişiklik yapıp tüm değişikliklerinizi yerine getirmelisiniz.

42
Spike

svn diff > out.patch kullanmayı deneyin, ardından out.patch dosyasını out.patch.add ve out.patch.modify dizinine kopyalayın 

Yalnızca çalışan bir düzeltme eki dosyanız varsa , svn revert out.c kullanarak orijinal dosyayı geri alın.

Düzeltme eki dosyalarını el ile düzenleyin, böylece yalnızca hunks komutunu eklemek veya değiştirmek için kullanırlar. Bunları patch komutunu kullanarak orijinal dosyaya uygulayın, ilavenin çalışıp çalışmadığını test edin, ardından ilaveyi svn commit.

Yıkayın durulayın out.patch.modify yama için tekrarlayın.

Eğer değişiklikler ilk dosyada belirtildiği gibi dosyada ayrı ise - yeni bir yöntem ekle, mevcut bir yöntemi değiştir - bu işe yarayacak

Bu çok sıkıcı bir çözüm - ikna olmama rağmen, taahhütlerinizi ayırmak için herhangi bir nedeniniz olması gerektiğine ikna olmadım.

Çalışmanızı uygulamak için aynı kaynağın birden fazla çalışan kopyasını da kontrol etmiş olabilirsiniz:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Her şeyin yolunda olduğundan emin olmak için svn up dosyasını test edin.

25
Chris

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

4.4.1. Taahhüt İletişim Kutusu

Çalışma kopyanız güncelse ve çakışma yoksa, değişikliklerinizi yapmaya hazırsınız demektir. Herhangi bir .__ seçin. taahhüt etmek istediğiniz dosya ve/veya klasörler, daha sonra TortoiseSVN → Taahhüt ....

<Snip>

4.4.3. Dosyaların sadece parçalarını işle

Bazen sadece bir dosyada yaptığınız değişikliklerin bir kısmını taahhüt etmek istersiniz. Böyle bir durum genellikle. Bir şey üzerinde çalışırken olur ama sonra acil bir düzeltme ihtiyacı var. taahhüt edilmesi ve bu düzeltmenin sizin olduğunuz aynı dosyada olması. üzerinde çalışmak. 

dosyaya sağ tıklayın ve işlemden sonra Bağlam Menüsü → Geri yükle seçeneğini kullanın. Bu, dosyanın olduğu gibi bir kopyasını oluşturur. Sonra düzenleyebilirsiniz. örneğin, dosya TortoiseMerge içinde ve istemediğiniz tüm değişiklikleri geri almayın. taahhüt. Bu değişiklikleri kaydettikten sonra dosyayı kabul edebilirsiniz. 

Taahhüt tamamlandıktan sonra, dosyanın kopyası geri yüklenir. otomatik olarak, ve tüm değişikliklerinizi içeren dosyaya sahipsin ki geri taahhüt edilmedi.

Linux'ta http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php denemeyi verebilirim. Yine de kendim denemedim.

10
parvus

Bunu yapardım:

  • Editörümde (vim kullanıyorum), dosyayı yalnızca değişikliklerden birinin görünmesi için düzenleyin.
  • Dosyayı kaydedin (ancak düzenleyiciden çıkmayın)
  • Değiştirilen dosyayı svn'ye gönder
  • Editörde "geri al" ı tıklatarak ikinci değişiklik dizisinin tekrar görünmesini sağlayın
  • Dosyayı tekrar kaydedin
  • İkinci değişiklik kümesini kabul edin.

Bu, bir değişiklik setinin geri alınmasının makul derecede 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ıp vereceğim.

Şimdi git kullanıyorum, bu bir daha yapmak zorunda kalmayacağım umudum bir şey!

8
Greg Hewgill

Yerel bir darms deposu kullanıyorum veya değişiklikleri aşamalı olarak birleştiriyorum. Birleştirme ile (opendiff, Xcode ile gelen bir birleştirme programı olan FileMerge'i açar; en sevdiğiniz birleştirme aracıyla değiştirin):

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

ilgili değişiklikleri birleştirme, birleştirme işlemini kaydetme, birleştirme programından çıkma

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

dosyada ilgisiz birden fazla hunk varsa, durulayın ve tekrarlayın (peki neden işlemden önce bu kadar uzun süre beklesiniz ?!)

Ayrıca, git biliyorsanız, git-svn komutunu kullanarak yerel bir git deposunu koruyabilir ve taahhütlerinizi svn ana sunucusuna eşitleyebilirsiniz; sınırlı deneyimimde harika çalışıyor.

5
Aeon

Deneyin Visual Studio için VisualSVN . en son 6.1 sürüm , QuickCommit özelliğini tanıtır. Yeni Bu Bloğu Tamamla ve Seçimi Kabul Et Visual Studio düzenleyicisindeki içerik menüsü komutları.

enter image description here

4
bahrep
  1. İstediğiniz düzenleyicide bölmek istediğiniz tüm dosyaları 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. Işlemek
  4. tercih editörüne geri dön ve tüm dosyaları kaydet

Spike'ın önerisinden biraz daha riskli, ancak yapılması daha kolay olabilir. Ayrıca, bazı editörler bu dosyayı yeniden yüklemediğiniz sürece (tüm değişikliklerinizi kaybeder) alttan değiştirilen bir dosyanın üzerine kaydetmeyi reddedeceğinden, önce başka bir şeyi denediğinizden emin olun

2
BCS

Sanırım, geri dönüşüm vb. Gibi farklı dosyalar oluşturmaktan daha kolay bir seçenek, havuzun iki kopyasının teslim alınmasını ve topakları birinden diğerine kopyalamak için DeltaWalker gibi görsel bir fark aracını kullanmak olacağını düşünüyorum.

İlk kopya, üzerinde çalıştığınız kopya olacaktır, ikincisi ise bu amaç için olacaktır. Birincisinde bir ton değişiklik yaptıktan sonra, bir bölümü ikinciye kopyalayabilir, işleyebilir, başka bir bölüm kopyalayabilir, işleyebilir vb.

0
Ian Dunn
  1. Yedek kopyalarla ilgili tüm değiştirilmiş dosyaları kopyalayın.
  2. svn diff kullanarak çalışma durumunun bir düzeltme ekini oluşturun.
  3. svn revert kullanarak dosyaları geri alın.
  4. Düzeltme işleminin gerçekleştirilmesini istediğiniz kısımları patch aracını kullanarak veya el ile düzenleyerek veya başka bir şekilde yeniden uygulayın.
  5. Düzeltme parçalarını doğru uyguladığınızdan emin olmak için çalışma kopyanızı yedeklemenizle karşılaştırmak için diff komutunu çalıştırın.
  6. İnşa et ve test et.
  7. Teslim Et.
  8. Yedek kopyalarınızı depo çıkışına geri kopyalayın.
  9. İşlem tamamlanana kadar 2'de (1'de değil!) Tekrarlayın.
0
michaeljt