鉴于这种情况,我在一个文件中做了两个独立的更改:例如。添加了一种新方法并更改了另一种方法。
我经常不想将两个更改都作为一个提交提交,而是作为两个独立的提交提交。
在 git 存储库中,我会使用 git-add(1) 的 Interactive Mode 将 hunk 拆分为更小的部分:
git add --patch
使用 Subversion 最简单的方法是什么? (甚至可能使用 Eclipse 插件)
更新:
在 The Thing About Git 中,Ryan 将其称为:“纠结的工作副本问题”。
Tortoise SVN 1.8 now supports 具有“提交后恢复”功能。这允许您对文件进行编辑,所有编辑在提交后都将被撤消
根据文档:
仅提交与特定问题相关的文件部分:在提交对话框中,右键单击文件,选择“提交后恢复” 在例如 TortoiseMerge 中编辑文件:撤消您不想提交的更改保存文件 提交文件
我已经使用 TortoiseSVN 完成了这项工作。
内置的合并实用程序允许您显示存储库版本和工作副本之间的差异。
使用 diff 实用程序的创建备份功能
去提交您的文件,就好像您要提交所有更改一样。在提交窗口中,双击文件以显示差异。在差异设置中,单击备份原始文件的选项。右键单击您不想要的更改,然后使用选择使用其他文本块。只保存一次差异。每次保存时都会覆盖备份。这就是为什么您只想保存一次。提交更改。用创建的 .bak 文件覆盖原始文件(其中将包含您的所有原始更改)。提交您的文件。
您现在应该使用两个单独的提交提交所有更改。
使用 git-svn,您可以创建远程 SVN 存储库的本地 GIT 存储库,使用完整的 GIT 功能集(包括部分提交)使用它,然后将其全部推送回 SVN 存储库。
尝试使用 svn diff > out.patch
,然后将 out.patch
文件复制到 out.patch.add
和 out.patch.modify
仅当您有一个工作补丁文件时使用 svn revert out.c
恢复原始文件。
手动编辑补丁文件,使其仅包含用于添加或修改的 hunks。使用 patch
命令将它们应用到原始文件,测试添加是否有效,然后 svn commit
添加。
对 out.patch.modify
贴片重复洗涤漂洗。
如果按照您最初的问题所述,文件中的更改是分开的-添加了新方法,更改了现有方法-这将起作用
这是一个非常乏味的解决方案——尽管我不相信你应该有任何理由分开你的提交。
您还可以签出同一来源的多个工作副本以应用您的工作:
svn co http://location/repository 方法添加 svn co http://location/repository 方法修改
请务必svn up
并进行测试以确保一切正常。
从 v1.8 开始,这可以使用 TortoiseSvn (Windows)。
4.4.1。提交对话框 如果您的工作副本是最新的并且没有冲突,您就可以提交更改了。选择您要提交的任何文件和/或文件夹,然后选择 TortoiseSVN → 提交....
在 Linux 上,我会尝试 http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php。不过,我自己还没有尝试过。
我曾经这样做:
在我的编辑器(我使用 vim)中,编辑文件以便只显示其中一项更改
保存文件(但不要退出编辑器)
将修改后的文件提交到 svn
在编辑器中点击“撤消”足够多次,以使第二组更改重新出现
再次保存文件
提交第二组更改。
这是一种简单的方法,假设一组更改相当容易撤消。对于更复杂的情况,我会放弃并提交这两项更改而不必担心。
现在我使用了 git,这是我希望我永远不必再做的事情!
我使用本地 darcs 存储库,或者只是逐渐合并更改。使用合并(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 存储库并将您的提交同步到 svn 主服务器;在我有限的经验中效果很好。
试试 VisualSVN for Visual Studio。 latest 6.1 release 引入了 QuickCommit 功能。您可以在 Visual Studio 编辑器中使用新的 Commit this Block 和 Commit Selection 上下文菜单命令部分提交文件中的选定更改。
https://i.stack.imgur.com/hV92h.gif
在选择的编辑器中打开所有要拆分的文件 使用不同的工具集(在 Win 上,使用 Spike 的建议(旧版本))退出第二组 提交回到您选择的编辑器并保存所有文件
这比 Spike 的完整建议风险更大,但更容易做到。还要确保您先在其他东西上尝试它,因为某些编辑器会拒绝保存从他们下面更改的文件,除非您重新加载该文件(丢失所有更改)
我认为比生成差异文件、还原等更简单的选择是检查存储库的两个副本,并使用像 DeltaWalker 这样的可视差异工具将大块从一个复制到另一个。
第一个副本将是您实际使用的副本,第二个副本仅用于此目的。一旦您对第一个部分进行了大量更改,您可以将一个部分复制到第二个部分,提交它,复制另一个部分,提交它等等。
将所有修改过的文件复制到备份副本。使用 svn diff 创建工作状态的补丁。使用 svn revert 恢复文件。使用补丁工具或通过手动编辑或其他方式重新应用您希望提交的补丁部分。之后运行 diff 以将您的工作副本与备份进行比较,以确保您正确应用了补丁部分。构建和测试。犯罪。将您的备份副本复制回您的存储库签出。在 2 处重复(不是在 1 处!)直到完成。