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

我经常不想提交这两项更改,因为 提交,但作为 独立承诺。

在 git 存储库上我会使用 互动模式git 添加(1) 来分割 猛男 分成更小的:

 git add --patch

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

更新:
关于 Git 的事情, ,瑞安称之为: “纠结的工作副本问题。”

有帮助吗?

解决方案

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

git-svn (1)

其他提示

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

根据文档:

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

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

我已经使用了这个方法 乌龟SVN.

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

使用 创建备份 diff 实用程序的功能

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

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

尝试使用 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 并进行测试以确保一切正常。

从 v1.8 开始,使用 TortoiseSvn (Windows) 就可以实现这一点。

4.4.1.提交对话框

如果您的工作副本是最新的并且没有冲突,您就可以提交更改了。选择要提交的任何文件和/或文件夹,然后选择TortoisesVN→提交。

<剪断>

4.4.3.仅提交部分文件

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

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

提交完成后,文件的副本会自动恢复,并且您的所有修改都没有返回。

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

我曾经这样做过:

  • 在我的编辑器(我使用 vim)中,编辑文件,以便只出现其中一项更改
  • 保存文件(但不要退出编辑器)
  • 将修改后的文件提交到svn
  • 在编辑器中点击“撤消”足够多次,第二组更改就会重新出现
  • 再次保存文件
  • 提交第二组更改。

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

现在我使用了 git,我希望我再也不用做这样的事情了!

我使用本地 Darcs 存储库,或者只是逐渐合并更改。带合并(opendiff打开Xcode自带的合并程序FileMerge;替换为您最喜欢的合并工具):

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. 。这 最新6.1版本 介绍 QuickCommit 功能。您可以使用新的方法部分提交文件中选定的更改 提交此块提交选择 Visual Studio 编辑器中的上下文菜单命令。

enter image description here

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

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

我认为比生成 diff 文件、恢复等更简单的选择是签出存储库的两个副本,并使用像 DeltaWalker 这样的可视化 diff 工具将块从一个副本复制到另一个副本。

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

  1. 将所有相关修改文件复制到备份副本。
  2. 使用创建工作状态的补丁 svn diff.
  3. 使用恢复文件 svn revert.
  4. 重新应用您想要提交的补丁部分,可以使用 patch 工具,或通过手动编辑,或其他方式。
  5. 跑步 diff 然后将您的工作副本与备份进行比较,以确保正确应用了补丁部分。
  6. 构建并测试。
  7. 犯罪。
  8. 将您的备份副本复制回您的存储库签出。
  9. 重复2。(不是1.!)直到完成。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top