svn如何用一个存储库的功能分支替换trunk

时间:2015-06-26 19:06:39

标签: svn

我的情况是我在主干中有很多存储库。 我在两个主干FEATURE分支中都有一个repo(repoA)。

我只想将我的repoA的所有代码从FEATURE分支复制到trunk分支并提交。

这样做的正确方法是什么? 我可以简单地复制文件夹吗?或者我这样做:

sandbox$ svn up -r ANOTHER_BRANCH

? 谢谢!

1 个答案:

答案 0 :(得分:0)

svn up获取当前签出的网址,并对其进行更新。如果它是主干,它将是主干。

您正在谈论两件事:

  1. 您希望使用分支机构中的代码替换当前检出的客户端目录中的代码。
  2. 您希望使用分支机构上的代码替换服务器上的中继。
  3. 第一个只会影响您计算机上检出的文件。如果其他人检查了主干,他们将获得当前主干,而不是功能分支。

    第二个用功能分支替换主干。签出代码的其他人现在将看到功能分支上的相同代码。

    那么,你想做什么?

    我将假设您要更改系统上的代码以指向功能分支,因此您可以使用功能分支:

    $ svn switch $SERVER_URL/branches/another_branch
    

    非常简单。这将使用分支中的文件更新当前工作目录,并将更改指向该分支的结帐URL。它还会保留您所做的更改,因此不是一个干净的结帐。

    如果您在检查中继线时出错,并做了一些工作,然后意识到您需要这些更改不是针对主干,而是针对分支机构,这会很有帮助。

    通常,我不鼓励使用svn switch。当您的计算机具有至少250Gb的空间时,没有太多理由与多个分支和主干共享工作目录。我担心混淆和混乱导致忘记你正在处理哪个分支或主干,并在错误的位置检查你的更改。

    即便如此,真正的大项目也不需要花费很长时间才能在Subversion中结账,一旦你检查了项目,你将永远不必再这样做了。简单的更新就足够了。所以,你没有节省那么多时间或磁盘空间。

    我看到的是有人签出$REPO_URL/trunk以便处理他们的项目$REPO_URL/trunk/foo并最终查看他们根本不需要的许多其他项目。

    事实上,因为我涉及数十个项目,我通常想要检查整个主干或分支,但只是在我需要之前不想要所有文件:

    $ mkdir -p ~/workdir/repo_name
    $ cd ~/workdir/repo_name
    $ svn co --depth=immediates $SERVER_URL/repo_name/trunk
    

    这将检查trunk上的所有项目,但没有文件。 --depth命令允许您执行稀疏检查,您可以在其中选择所需的苍蝇。例如,我需要处理项目foobar

    $ cd ~/workdir/repo_name/trunk
    $ svn up --set-depth=infinity foo bar
    

    我可以在分支foobar上做同样的事情:

    $ cd ~/workdir/repo_name
    $ svn co --depth=immediates $SERVER_URL/repo_name/foobar
    $ cd foobar
    $ svn up --set-depth=infinity foo bar
    

    现在,我可以查看我当前的工作目录,看看我在哪个repo和分支,并且知道我在正确的位置。唯一的问题是,自Subversion 1.7以来,如果我在`bar中运行svn命令需要一段时间来处理,我无法在foo中运行svn命令。