我的情况是我在主干中有很多存储库。 我在两个主干FEATURE分支中都有一个repo(repoA)。
我只想将我的repoA的所有代码从FEATURE分支复制到trunk分支并提交。
这样做的正确方法是什么? 我可以简单地复制文件夹吗?或者我这样做:
sandbox$ svn up -r ANOTHER_BRANCH
? 谢谢!
答案 0 :(得分:0)
svn up
获取当前签出的网址,并对其进行更新。如果它是主干,它将是主干。
您正在谈论两件事:
第一个只会影响您计算机上检出的文件。如果其他人检查了主干,他们将获得当前主干,而不是功能分支。
第二个用功能分支替换主干。签出代码的其他人现在将看到功能分支上的相同代码。
那么,你想做什么?
我将假设您要更改系统上的代码以指向功能分支,因此您可以使用功能分支:
$ 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
命令允许您执行稀疏检查,您可以在其中选择所需的苍蝇。例如,我需要处理项目foo
和bar
:
$ 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
命令。