it-swarm.cn

部分提交Subversion

鉴于我做了 两个独立的更改 in one文件:例如。添加了一个新方法并更改了另一种方法。

我经常不想将这两个更改都提交为 one commit,而是 two independent commit。

在git存储库中,我将使用 交互模式 of git-add(1)hunk拆分为较小的:

 git add --patch

使用Subversion最简单的方法是什么? (甚至可能使用Eclipse插件)

更新:
关于Git的事 ,Ryan称之为:“纠缠不清的工作副本问题。”

98
Benedikt Waldvogel

使用git-svn,您可以创建远程SVN存储库的本地GIT存储库,使用完整的GIT功能集(包括部分提交)使用它,然后将其全部推送回SVN存储库。

git-svn(1)

32
jkramer

Tortoise SVN 1.8 现在支持 它带有“提交后恢复”功能。这允许您对文件进行编辑,并在提交后撤消所有编辑

根据文档: /

仅提交与一个特定问题相关的文件部分:

  1. 在提交对话框中,右键单击文件,选择“提交后恢复”
  2. 在例如编辑文件TortoiseMerge:撤消您不想提交的更改
  3. 保存文件
  4. 提交文件
59
Casebash

我用 TortoiseSVN 做了这个。

内置的合并实用程序允许您显示存储库版本和工作副本之间的差异。

使用diff实用程序的create backup函数

  1. 转到提交您的文件,就像您要提交所有更改一样。
  2. 在提交窗口中,双击该文件以显示差异。
  3. 在差异设置中,单击备份原始文件选项。
  4. 右键单击您不想要的更改,然后使用select 使用其他文本块
  5. 保存diff 恰好一次 。每次保存时都会覆盖备份。这就是为什么你只想保存一次。
  6. 承诺改变。
  7. 使用创建的.bak文件覆盖原始文件(将包含所有原始更改)。
  8. 提交你的文件。

您现在应该使用两个单独的提交来提交所有更改。

41
Spike

尝试使用svn diff > out.patch然后将out.patch文件复制到out.patch.addout.patch.modify

只有当你有一个工作补丁文件时 使用svn revert out.c恢复原始文件。

手动编辑补丁文件,使它们只包含 帅哥 用于添加或修改。使用patch命令将它们应用于原始文件,测试添加是否有效,然后svn commit添加。

冲洗out.patch.modify补丁重复冲洗。

如果更改在文件中与您提出的初始问题分开 - 添加了一个新方法,更改了现有方法 - 这将起作用

这是一个非常繁琐的解决方案 - 虽然我不相信你应该有任何理由将你的提交分开。

您还可以检出同一来源的多个工作副本以应用您的工作:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

一定要svn up并测试以确保一切顺利。

24
Chris

从v1.8开始,这可以使用TortoiseSvn(Windows)。

4.4.1。提交对话框

如果您的工作副本是最新的且没有冲突,则您已准备好提交更改。选择要提交的任何文件和/或文件夹,然后选择TortoiseSVN→Commit ....

<剪断>

4.4.3。仅提交部分文件

有时您只想提交对文件所做更改的部分内容。这种情况通常发生在您正在处理某些事情但随后需要提交紧急修复时,并且该修复恰好位于您正在处理的同一文件中。

右键单击该文件并使用上下文菜单→提交后恢复。这将按原样创建文件的副本。然后你可以编辑文件,例如在TortoiseMerge中,撤消您不想提交的所有更改。保存这些更改后,您可以提交该文件。

提交完成后,将自动恢复该文件的副本,并且您拥有包含未提交的所有修改的文件。

在Linux上,我会给 http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php 试一试。但是,自己没有尝试过。

10
parvus

我曾经这样做过:

  • 在我的编辑器中(我使用vim),编辑文件以便只显示其中一个更改
  • 保存文件(但不要退出编辑器)
  • 将更改的文件提交给svn
  • 在编辑器中点击“撤消”足够的时间再次出现第二组更改
  • 再次保存文件
  • 提交第二组更改。

这是一种简单的方法,假设一组更改很容易撤消。对于更复杂的情况,我会放弃并提交两个更改而不用担心它。

现在我使用git,这是我希望我再也不用做了!

7
Greg Hewgill

我使用本地darcs repo,或者只是逐步合并更改。通过合并(opendiff打开FileMerge,Xcode附带的合并程序;替换为您最喜欢的合并工具):

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

合并相关更改,保存合并,退出合并程序

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

如果文件中有多个不相关的大块,请冲洗并重复(但为什么要等到这么久才能提交?!)

另外,如果你知道git,你可以使用 git-svn 来维护本地git repo并将你的提交同步到svn主服务器;在我有限的经验中工作得很好。

4
Aeon

尝试 Visual Studio的VisualSVN最新的6.1版本 介绍了QuickCommit功能。您可以使用新的 在Visual Studio编辑器中提交此块 提交选择 上下文菜单命令,在文件中部分提交所选更改。

enter image description here 

3
bahrep
  1. 打开要在编辑器中拆分的所有文件
  2. 使用不同的工具集(在Win上,使用Spike的建议(旧版本))退出第二组
  3. 承诺
  4. 回到你的选择编辑器并保存所有文件

它比Spike的完整建议风险稍大,但可能更容易做到。还要确保先在其他内容上尝试,因为有些编辑会拒绝保存已从其下更改的文件,除非您重新加载该文件(丢失所有更改)

2
BCS

我认为比生成差异文件,还原等更容易的选择是检出存储库的两个副本,并使用像DeltaWalker这样的视觉差异工具将智能从一个复制到另一个。

第一个副本将是你实际工作的副本,第二个副本就是为此目的。一旦你对第一部分进行了大量的更改,你可以将一个部分复制到第二部分,提交它,复制另一部分,提交它等等。

0
Ian Dunn
  1. 将所有相关的已修改文件复制到备份副本。
  2. 使用svn diff创建工作状态的补丁。
  3. 使用svn revert还原文件。
  4. 使用patch工具或手动编辑或其他方式重新应用要提交的修补程序部分。
  5. 之后运行diff将您的工作副本与备份进行比较,以确保正确应用了补丁部分。
  6. 构建和测试。
  7. 承诺。
  8. 将备份副本复制回存储库签出。
  9. 重复2.(不是1.!)直到完成。
0
michaeljt