如何使用SVN分支修改后的工作副本?

时间:2012-10-02 13:11:40

标签: svn branch

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

所以:

  1. 我想基于我的工作副本创建一个新的分支,而不必检查我的工作副本(尽管最新的HEAD版本是最新的)

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

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

3 个答案:

答案 0 :(得分:7)

所以我尝试了两种方法来分支我的工作副本而不检查它,不确定哪一种最终会成为最好的方法:

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

  • 右键单击您的工作副本文件夹,然后选择Tortoise SVN>回购浏览器
  • 在Repo Browser中,在与“trunk”
  • 相同的级别创建一个名为“branches”的新目录
  • 在“分支”目录内,创建一个带有分支“名称”的新目录(“名称”是指一个标识该分支的标签,例如:如果您正在处理特殊通知系统在这个分支中,称之为“通知”等......)
  • 现在,仍然在Repo Browser中右键单击并选择“添加文件夹”并选择本地工作副本
  • 这需要一段时间,因为正在复制所有文件(包括.svn文件)。这也复制了你有svn:忽略的无版本文件和文件,这可能是不可取的。

方法2:使用分支/标记

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

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

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

答案 1 :(得分:3)

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

cd trunk
svn diff > ..\my_stuff.diff

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

cd new_branch
svn patch ..\my_stuff.diff 

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

svn patch ..\my_stuff.diff --dry-run

答案 2 :(得分:1)

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

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

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