【问题标题】:How do I branch a modified working copy with SVN?如何使用 SVN 分支修改后的工作副本?
【发布时间】:2012-10-02 13:11:40
【问题描述】:

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

所以:

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

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

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

【问题讨论】:

标签: svn branch


【解决方案1】:

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

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

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

方法二:使用分支/标签

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

看来方法2肯定更可取。

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

【讨论】:

  • 方法 2 对我来说效果很好 - 用户界面在 17 年有点不同,但说明让我通过了。
  • 方法 2 也适用于我。好电话。
【解决方案2】:

如果您希望继续在同一个文件夹中工作,此post 显示了如何操作。

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

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

【讨论】:

  • 也许您可以在答案中总结该帖子 - 否则如果该链接失效,您的答案对未来对您的解决方案感兴趣的人将变得毫无用处。
【解决方案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

【讨论】:

  • 酷。但听起来你是从主干存储库创建一个差异文件,而不是工作副本?还是我看错了?
  • 没有 svn diff 命令“在工作副本中显示本地修改”:svnbook.red-bean.com/en/1.7/svn.ref.svn.c.diff.html 所以我得到了本地更改。
  • 我对您的解决方案很感兴趣。听起来你正在做的是修补 new_branch ,所以它就像工作副本一样。那么首先如何获得 new_branch 呢?
猜你喜欢
  • 1970-01-01
  • 2011-02-23
  • 2011-03-19
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多