鉴于此案例,我在一个文件中进行了两次独立更改:例如。添加了一种新方法并改变了另一种方法。
我经常不希望将这两项更改都作为一次提交,而是作为两次独立提交。
在git存储库中,我会使用git-add(1)的交互模式将 hunk 拆分为较小的:
git add --patch
使用Subversion执行此操作的最简单方法是什么? (甚至可能使用Eclipse插件)
更新
在The Thing About Git中,Ryan称之为:“纠缠不清的工作副本问题。”
答案 0 :(得分:59)
Tortoise SVN 1.8 now supports这与它的“提交后恢复”功能。这允许您对文件进行编辑,在提交
后撤消所有编辑根据文档:
仅提交与一个特定问题相关的文件部分:
- 在提交对话框中,右键单击文件,选择“提交后恢复”
- 编辑文件,例如TortoiseMerge:撤消您不想提交的更改
- 保存文件
- 提交文件
醇>
答案 1 :(得分:41)
我使用TortoiseSVN完成了此操作。
内置合并实用程序允许您在存储库版本和工作副本之间显示差异。
使用diff实用程序的创建备份功能
您现在应该使用两个单独的提交来提交所有更改。
答案 2 :(得分:32)
使用git-svn,您可以创建远程SVN存储库的本地GIT存储库,使用完整的GIT功能集(包括部分提交)使用它,然后将其全部推送回SVN存储库。
答案 3 :(得分:24)
尝试使用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 methodAdd
svn co http://location/repository methodModify
务必svn up
并进行测试以确保一切正常。
答案 4 :(得分:10)
从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。但是,自己没试过。
答案 5 :(得分:7)
我曾经这样做过:
这是一种简单的方法,假设一组更改很容易撤消。对于更复杂的情况,我会放弃并提交两个更改而不用担心它。
现在我使用git,这是我希望我再也不用做了!
答案 6 :(得分:4)
我使用本地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主服务器;在我有限的经历中表现很好。
答案 7 :(得分:3)
试试VisualSVN for Visual Studio。 latest 6.1 release引入了QuickCommit功能。您可以使用Visual Studio编辑器中的新提交此块和提交选择上下文菜单命令,在文件中部分提交所选更改。
答案 8 :(得分:2)
这比Spike的完整建议风险更高,但更容易做到。另外,请确保先尝试其他内容,因为有些编辑会拒绝保存已更改的文件,除非您重新加载该文件(丢失所有更改)
答案 9 :(得分:0)
I think an easier option than generating diff files, reverting, etc, would be to have two copies of the repository checked out, and use a visual diff tool like DeltaWalker to copy hunks from one to the other.
The first copy would be the one you actually work off of, and the second would just be for this purpose. Once you've made a ton of changes to the first, you can copy one section over to the second, commit it, copy another section, commit it, etc.
答案 10 :(得分:0)
svn diff
创建工作状态的补丁。svn revert
恢复文件。patch
工具或手动编辑等重新应用您要提交的修补程序部分。diff
,将您的工作副本与备份进行比较,以确保正确应用了补丁部件。