ChatGPT解决这个技术问题 Extra ChatGPT

Subversion 的部分提交

鉴于这种情况,我在一个文件中做了两个独立的更改:例如。添加了一种新方法并更改了另一种方法。

我经常不想将两个更改都作为一个提交提交,而是作为两个独立的提交提交。

在 git 存储库中,我会使用 git-add(1)Interactive Modehunk 拆分为更小的部分:

 git add --patch

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

更新:
The Thing About Git 中,Ryan 将其称为:“纠结的工作副本问题”。

您是否专门在命令行上寻找解决方案?下面的许多回复都提到了 TortoiseSVN 'restore after commit',这是 Tortoise 独有的功能——因此基于 GUI 和 Windows。

M
Micha Wiedenmann

Tortoise SVN 1.8 now supports 具有“提交后恢复”功能。这允许您对文件进行编辑,所有编辑在提交后都将被撤消

根据文档:

仅提交与特定问题相关的文件部分:在提交对话框中,右键单击文件,选择“提交后恢复” 在例如 TortoiseMerge 中编辑文件:撤消您不想提交的更改保存文件 提交文件


我想知道这是如何工作的。我检查了 SVN 1.8 release notes,但我不知道“提交后恢复”基于哪个功能。
@DavidS 这不是 SVN 的功能。这是 TortoiseSVN 的一个特性。
仅供参考,SVN 1.8 将于 2018 年 4 月随着 1.10 的发布而 EOL
我们也可以在此处的文档中找到它:tortoisesvn.net/docs/release/TortoiseSVN_en/…
K
Kariem

我已经使用 TortoiseSVN 完成了这项工作。

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

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

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

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


你到底是怎么做到的?我有兴趣学习这种技术。
如果这会在提交后自动覆盖 .bak 文件,那就太好了。
我没有找到第 3 步:备份选项,使用 Tortoise SVN 1.8.1
没关系。找到 1.8 tortoisesvn.net/tsvn_1.8_releasenotes.html 的对应链接 仅提交与一个特定问题相关的文件部分:在提交对话框中,右键单击文件,选择“提交后恢复” 在例如 TortoiseMerge 中编辑文件:撤消您不想提交但保存文件的更改 提交文件
可悲的是,这在 Tortoise 1.8.5 版中似乎不可用,“提交后恢复”也不可用。
b
blahdiblah

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

git-svn (1)


这个解决方案特别具有讽刺意味。
C
Chris

尝试使用 svn diff > out.patch,然后将 out.patch 文件复制到 out.patch.addout.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并进行测试以确保一切正常。


C
Community

从 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。不过,我自己还没有尝试过。


G
Greg Hewgill

我曾经这样做:

在我的编辑器(我使用 vim)中,编辑文件以便只显示其中一项更改

保存文件(但不要退出编辑器)

将修改后的文件提交到 svn

在编辑器中点击“撤消”足够多次,以使第二组更改重新出现

再次保存文件

提交第二组更改。

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

现在我使用了 git,这是我希望我永远不必再做的事情!


A
Aeon

我使用本地 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 主服务器;在我有限的经验中效果很好。


回复:“为什么要等这么久?”你整天都在做一个大的重构,而老板在午餐前丢了一个小修复这个现在的错误。
b
bahrep

试试 VisualSVN for Visual Studiolatest 6.1 release 引入了 QuickCommit 功能。您可以在 Visual Studio 编辑器中使用新的 Commit this BlockCommit Selection 上下文菜单命令部分提交文件中的选定更改。

https://i.stack.imgur.com/hV92h.gif


B
BCS

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

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


I
Ian Dunn

我认为比生成差异文件、还原等更简单的选择是检查存储库的两个副本,并使用像 DeltaWalker 这样的可视差异工具将大块从一个复制到另一个。

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


m
michaeljt

将所有修改过的文件复制到备份副本。使用 svn diff 创建工作状态的补丁。使用 svn revert 恢复文件。使用补丁工具或通过手动编辑或其他方式重新应用您希望提交的补丁部分。之后运行 diff 以将您的工作副本与备份进行比较,以确保您正确应用了补丁部分。构建和测试。犯罪。将您的备份副本复制回您的存储库签出。在 2 处重复(不是在 1 处!)直到完成。