你如何用svn进行部分分期?

时间:2015-12-03 16:22:22

标签: git svn patch

我尝试应用我的"合并并非所有更改"从gitsvn的技能。 svn中没有关于交互式舞台演出的事情,毫无疑问。但你可以制作一个补丁,并从中应用几个帅哥,并做一个提交。等等。或者我想。

使用git,我不仅没有提交选定的帅哥的问题,而且我能够编辑帅哥(选择帅哥的哪些部分提交)。使用svn,我能够做第一次提交。在那之后,事情变得混乱。考虑一下这个差异:

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
   end

   def log(treeish = 'master')
-    command("git log -n 25 #{treeish}")
+    command("git log -n 30 #{treeish}")
   end

   def blame(path)

要应用补丁,我应该修复-22,7 +22,7部分,以反映大块的当前位置。 git我从来不需要这样的东西。应用补丁时git使用更宽松的设置吗?有没有办法用svn简化这个工作流程?在应用补丁时,我可以指定哪些内容使其不那么严格吗?

UPD svn无关。例如,我将三行添加到文件中:

line 1
line 2
line 3

使用git我可以运行git add -p,按 e (编辑大块)并删除line 2。然后git成功地发布了这个:

line 1
line 3

使用svn,当我执行:svn diff > 1.patch时,从补丁文件中删除第二行,并尝试将其应用回来(patch -p0 < 1.patch),它不会解决问题:

patch: **** malformed patch at line ..:

1 个答案:

答案 0 :(得分:0)

我的猜测是这条线具有魔力:

index dd5ecc4..57399e0 100644

这允许Git跟踪提交。因此,它知道哪些帅哥已被应用,哪些尚未被应用。另一方面,Subversion无法跟踪部分补丁。它在提交时使用“全有或全无”的方法。

如果您仍想在Subversion中部分提交而不会疯狂,那么您可以执行以下操作:

  • 在subversion中创建代码的Git存储库
  • 编辑提交,直到它们符合您的要求
  • 将每个提交导出为单个修补程序
  • 应用每个补丁以进行Subversion

或者您可以尝试使用众多Git-Subversion之一。但是你需要了解Subversion是一个来自“黑暗时代”的工具。它不像CVS那样“石器时代”,但它仍然缺乏DCVS开箱即用的许多奇特功能。