Subversion:我可以签出,修改然后使其成为分支吗?


80

我从后备箱到本地DIR进行了结帐,并在那里进行了许多本地更改。现在,我不想将其提交回主干,但我希望从该本地版本创建一个分支。那可能吗?

可我只是树干复制到一个分支,然后cd DIRsvn switch分支?

更新:感谢您的回答,它起作用了!总结步骤:

  • cd DIR
  • svn copy . new-branch-URL
  • svn switch new-branch-URL .

(注意点)


是的你可以。我使用tortoiseSVN,您可以这样做。
尼克,

通过使用发现太多冲突svn switch,因此我选择从new-branch-URL之后签出新副本svn copy
fikr4n

Answers:


39

根据其命令行帮助,svn copy可以从目录复制到存储库URL。因此,您应该能够将工作副本复制到分支机构,例如:

svn copy working_directory url_to_branch

52

SVN手册(http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.branchmerge.using.create)不建议从本地工作副本创建分支。

虽然也可以通过svn copy在工作副本中复制目录来创建分支,但不建议使用此技术。实际上,它可能相当慢!在客户端复制目录是线性时间操作,因为它实际上必须复制本地磁盘上该工作复制目录中的每个文件和子目录。

而是先创建分支,然后使用svn switch命令,以便您可以提交更改。如果您的工作副本与主干相比已经过时,请在源URL后面附加“ @REV”,其中“ REV”是所报告的工作副本的修订版svn info

但是,在服务器上复制目录是一项固定时间的操作,这是大多数人创建分支的方式。

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/my-calc-branch \
      -m "Creating a private branch of /calc/trunk."

2
感谢您的回答。这是更好的解决方案,因为它保留了修订历史记录。
evanflash 2012年

3
这是否意味着如果我在本地工作副本中进行了更改,可以svn copy <trunk-URL> <newBranch-URL>将中继复制到svn服务器上的新分支,然后svn switch在我的工作副本中使用以切换到新分支而不丢失任何更改?还是该开关会杀死我未提交的修改文件?
卡萨波2012年

3
@Kasapo,是的,没错。并注意您是否已经过时了;如果是这样,请按照我提到的在源URL上添加“ @REV”,以便在切换到分支后,只有本地更改才会显示为差异。
卢卡斯2012年

让我添加一个非常有用的链接,其中更详细地说明了卢卡斯的解决方案:svnbook.red-bean.com/en/1.6/svn.branchmerge.switchwc.html(请看底部的信息框)。实际上,这是从本地修改创建分支的最干净,最方便的解决方案。
Spiros 2014年

9

在我的SVN客户端:TortoiseSVN中,它足以:

  • 右键单击要分支的顶部目录
  • 在“到URL”中,选择存储库中的分支目录
  • 在“从以下位置在存储库中创建副本:”框架中,选择“工作副本”

完成:)

就像将本地版本复制到指定的存储库url一样。


1

是的,您可以通过SVN命令行以及tortoiseSVN来执行此操作。

您必须将SVN工作副本指定为src,并将新分支指定为

svn copy <file/path/to/working/copy> <URL/TO/REPOSITORY/BRANCH>

命令。

在TortoiseSVN中,只需指向您的工作副本,从上下文菜单中选择“分支/标签”,然后在“从以下位置在存储库中创建副本”部分中选择“工作副本”:

请注意,以这种方式创建标记不是一个好主意(出于可追溯性的原因),但是对于分支机构而言,这是完全可以的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.