带有Subversion的部分提交

svn git

24543 观看

11回复

8548 作者的声誉

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

我通常不希望将两个更改都提交为一个提交,而是两个独立的提交。

在一个Git仓库我会使用交互模式混帐加(1)到拆分大块分成较小的:

 git add --patch

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

更新:
本件事的Git,瑞恩将其称为:“纠缠不清的工作拷贝的问题。”

作者: Benedikt Waldvogel 的来源 发布者: 2008 年 9 月 16 日

回应 (11)


7

719025 作者的声誉

我曾经这样做:

  • 在我的编辑器(我使用vim)中,编辑文件,以便仅显示其中一项更改
  • 保存文件(但不要退出编辑器)
  • 将更改的文件提交到svn
  • 在编辑器中按“撤消”足够的时间,以便第二组更改重新出现
  • 再次保存文件
  • 提交第二组更改。

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

现在,我使用git,这是我希望不再需要做的事情!

作者: Greg Hewgill 发布者: 16.09.2008 07:13

41

544 作者的声誉

我已经使用TortoiseSVN做到了这一点。

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

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

  1. 就像提交所有更改一样,提交文件。
  2. 在提交窗口中,双击文件以显示差异。
  3. 在差异设置中,单击选项以备份原始文件
  4. 右键单击不需要的更改,然后使用select use other text block
  5. 仅将差异保存一次。每次保存时,备份将被覆盖。这就是为什么您只想保存一次的原因。
  6. 提交更改。
  7. 用创建的.bak文件覆盖原始文件(将进行所有原始更改)。
  8. 提交文件。

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

作者: Spike 发布者: 16.09.2008 07:16

4

5567 作者的声誉

我使用本地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 repo并将提交同步到svn主服务器。在我有限的经验中效果很好。

作者: Aeon 发布者: 16.09.2008 07:18

24

241 作者的声誉

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

作者: Chris 发布者: 16.09.2008 07:21

34

12149 作者的声誉

决定

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

git-svn(1)

作者: jkramer 发布者: 16.09.2008 07:37

2

34753 作者的声誉

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

它比Spike的完整建议要冒险一些,但操作起来更容易。还要确保先尝试其他方法,因为某些编辑器将拒绝保存从其下更改而来的文件,除非您重新加载该文件(丢失所有更改)

作者: BCS 发布者: 20.01.2009 05:45

59

51957 作者的声誉

Tortoise SVN 1.8 现在通过“提交后还原”功能支持此功能。这使您可以对文件进行编辑,并在提交后撤消所有编辑

根据文档:

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

  1. 在提交对话框中,右键单击文件,选择“提交后还原”
  2. 在例如TortoiseMerge中编辑文件:撤消您尚未提交的更改
  3. 保存文件
  4. 提交文件
作者: Casebash 发布者: 09.07.2013 01:27

11

3541 作者的声誉

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

作者: parvus 发布者: 08.10.2013 06:40

0

1876 作者的声誉

我认为比生成差异文件,还原等更容易的选择是检出存储库的两个副本,并使用可视差异工具(如DeltaWalker)将块从一个复制到另一个。

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

作者: Ian Dunn 发布者: 12.02.2016 07:35

0

743 作者的声誉

  1. 将所有相关的修改文件复制到备份副本。
  2. 使用创建工作状态补丁svn diff
  3. 使用恢复文件svn revert
  4. 使用patch工具或通过手动编辑等方式重新应用希望提交的补丁程序部分。
  5. diff然后运行以将工作副本与备份进行比较,以确保正确应用了修补程序部分。
  6. 构建和测试。
  7. 承诺。
  8. 将您的备份副本复制回存储库签出中。
  9. 重复2。(而不是1.!),直到完成。
作者: michaeljt 发布者: 13.10.2017 02:10

4

23533 作者的声誉

尝试使用VisualSVN for Visual Studio。在最新的6.1版本中引入了QuickCommit功能。您可以使用Visual Studio编辑器中的新的“ 提交此阻止提交选择”上下文菜单命令来部分提交文件中的选定更改。

在此处输入图片说明

作者: bahrep 发布者: 23.03.2018 02:49
32x32