11 回答
Tortoise SVN 1.8现在支持它的“提交后恢复”功能。这允许您对文件进行编辑,所有编辑在提交后都将被撤消
根据文档:
仅提交与一个特定问题相关的文件部分:
- 在提交对话框中,右键单击文件,选择“提交后恢复”
- 在例如 TortoiseMerge 中编辑文件:撤消您还不想提交的更改
- 保存文件
- 提交文件
我已经使用TortoiseSVN完成了这项工作。
内置的合并实用程序允许您显示存储库版本和工作副本之间的差异。
使用diff 实用程序的创建备份功能
- 去提交您的文件,就好像您要提交所有更改一样。
- 在提交窗口中,双击文件以显示差异。
- 在差异设置中,单击备份原始文件的选项。
- 右键单击您不想要的更改,然后使用 select use other text block。
- 只保存一次差异。每次保存时都会覆盖备份。这就是为什么您只想保存一次。
- 提交更改。
- 用创建的 .bak 文件覆盖原始文件(其中将包含您的所有原始更改)。
- 提交您的文件。
您现在应该使用两个单独的提交提交所有更改。
使用 git-svn,您可以创建远程 SVN 存储库的本地 GIT 存储库,使用完整的 GIT 功能集(包括部分提交)使用它,然后将其全部推送回 SVN 存储库。
尝试使用svn diff > out.patch
然后将out.patch
文件复制到out.patch.add
和out.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
测试以确保一切正常。
从 v1.8 开始,这可以使用 TortoiseSvn (Windows)。
4.4.1。提交对话框
如果您的工作副本是最新的并且没有冲突,那么您就可以提交更改了。选择您要提交的任何文件和/或文件夹,然后选择 TortoiseSVN → 提交...。
<剪辑>
4.4.3. 仅提交部分文件
有时您只想提交对文件所做的部分更改。这种情况通常发生在您正在处理某事但需要提交紧急修复程序时,并且该修复程序恰好位于您正在处理的同一文件中。
右键单击文件并使用上下文菜单→提交后恢复。这将按原样创建文件的副本。然后您可以编辑该文件,例如在 TortoiseMerge 中并撤消您不想提交的所有更改。保存这些更改后,您可以提交文件。
提交完成后,文件的副本会自动恢复,您将拥有所有未提交的修改的文件。
在 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 repo 并将你的提交同步到一个 svn 主服务器;在我有限的经验中效果很好。
- 在选择编辑器中打开要拆分的所有文件
- 使用不同的工具集(在 Win 上,使用 Spike 的建议(旧版本))退出第二组
- 犯罪
- 返回您选择的编辑器并保存所有文件
这比 Spike 的完整建议风险更大,但更容易做到。还要确保您先在其他东西上尝试它,因为某些编辑器会拒绝保存从他们下面更改的文件,除非您重新加载该文件(丢失所有更改)
我认为比生成差异文件、还原等更简单的选择是检查存储库的两个副本,并使用像 DeltaWalker 这样的可视差异工具将大块从一个复制到另一个。
第一个副本将是您实际使用的副本,第二个副本仅用于此目的。一旦您对第一个部分进行了大量更改,您可以将一个部分复制到第二个部分,提交它,复制另一个部分,提交它等等。
- 将所有修改过的文件复制到备份副本。
- 使用 .创建工作状态的补丁
svn diff
。 - 使用 还原文件
svn revert
。 patch
使用该工具或通过手动编辑或其他方式重新应用您希望提交的补丁部分。- 之后运行
diff
以将您的工作副本与备份进行比较,以确保您正确应用了补丁部分。 - 构建和测试。
- 犯罪。
- 将您的备份副本复制回您的存储库签出。
- 在 2 处重复(不是在 1 处!)直到完成。