16

我开始研究我认为对主干的一个小改动,离开了一个月,现在我意识到这确实是一个完整的副项目(充满了错误),确实需要它自己的分支。此外,一旦我对这些更改进行了分支,我想将我的工作副本重置回主干中的当前内容,这样我就可以在有时间的时候回到这个副项目之前帮助完成主要的开发工作和高优先级的项目。

所以:

  1. 我想根据我的工作副本创建一个新分支,而无需签入我的工作副本(尽管它是最新的 HEAD 修订版)

  2. 一旦我分叉了我的工作副本,我想基本上删除分支中的所有更改,并将其设置为与主干中当前的​​ HEAD 版本匹配。

程序是什么?我正在使用 TortoiseSVN,但即使是命令行指令也会有所帮助。

4

3 回答 3

12

所以我尝试了两种方法来分支我的工作副本而不签入,不确定哪种方法最终会是最好的方法:

方法1:将整个目录复制到新分支

  • 右键单击您的工作副本文件夹并选择 Tortoise SVN > Repo Browser
  • 在 Repo Browser 中创建一个名为“branches”的新目录,与“trunk”处于同一级别
  • 在“分支”目录中,使用您的分支的“名称”创建一个新目录(我的意思是“名称”是一个标识该分支的标签,例如:如果您正在处理此分支中的特殊通知系统分支,称之为“通知”等...)
  • 现在,仍然在 Repo Browser 中右键单击并选择“添加文件夹”并选择您的本地工作副本
  • 这需要一段时间,因为所有文件(包括 .svn 文件)都在被复制。这也会复制未受版本控制的文件和您已 svn:ignored 的文件,这可能不是我们想要的。

方法2:使用分支/标签

  • 右键单击您的工作副本文件夹并选择 Tortoise SVN > 分支/标签...
  • 它打开了回购浏览器,因此创建一个新目录“分支”,然后在其中创建一个带有分支“名称”的新目录
  • 您在“在存储库中创建副本”部分中选择“工作副本”按钮。这就是将本地更改的差异提交到此分支的内容
  • 这似乎只复制与 HEAD 修订版不同的文件。
  • 但是,如果您随后再次使用 Repo 浏览器查看其中的内容,则整个 HEAD 修订版 + 您的本地更改都在其中

看起来方法2绝对是可取的。

然后,要清理,这是 Tortoise SVN > Revert... 和“删除所有未版本化”的问题

于 2012-10-02T19:08:46.300 回答
3

在命令行中,您可以使用 subversion "diff" 命令创建补丁,然后使用 subversion "patch" 命令将其应用到新分支。(您可以通过执行 'svn help diff' 和 'svn help patch' 来了解这些命令)。假设您在同一个父目录中有主干和一个名为 new_branch 的分支。

cd trunk
svn diff > ..\my_stuff.diff

现在你有了补丁,然后将它应用到你新创建的分支。

cd new_branch
svn patch ..\my_stuff.diff 

您可以通过在补丁命令中添加 --dry-run 标志来先干运行补丁,以查看在实际应用之前是否发生任何奇怪的事情。

svn patch ..\my_stuff.diff --dry-run
于 2012-10-03T06:46:34.393 回答
3

如果您希望继续在同一个文件夹中工作,这篇文章将展示如何做。

基本上svn copy是创建一个分支svn switch以从同一工作副本指向新分支并svn commit提交您的更改。

确保您从您开始修改(检查)的同一分支/修订版中分支出来,svn info否则您可能会在切换后遇到许多冲突。

于 2017-11-09T21:36:06.553 回答