Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 如何从同一存储库中检出多个项目的主干?_Svn - Fatal编程技术网

Svn 如何从同一存储库中检出多个项目的主干?

Svn 如何从同一存储库中检出多个项目的主干?,svn,Svn,我们有一个SVN存储库,其中包含多个相关项目。就像这样 \repo \Project1 \branches \tags \trunk \Project2 \branches \tags \trunk \Project3 \branches \tags \trunk 我想将每个项目的主干签出到我的工作区中,而不签出Branchs/tags文件夹 \workspace \Project1 \trunk

我们有一个SVN存储库,其中包含多个相关项目。就像这样

\repo
  \Project1
    \branches
    \tags
    \trunk
  \Project2
    \branches
    \tags
    \trunk
  \Project3
    \branches
    \tags
    \trunk
我想将每个项目的主干签出到我的工作区中,而不签出Branchs/tags文件夹

\workspace
  \Project1
    \trunk
  \Project2
    \trunk
  \Project3
    \trunk
有没有一种方法可以在不单独检查每个中继的情况下执行此操作?

简短回答:没有

详细回答:在循环脚本中查看并执行签出。

编辑:在下面的部分中签出

将两个不同的目录签出到两个独立的工作副本中:

$ svn checkout file:///tmp/repos/test  file:///tmp/repos/quiz
A  test/a
A  test/b
Checked out revision 2.
A  quiz/l
A  quiz/m
Checked out revision 2.
$ ls
quiz  test
将两个不同的目录签出到两个独立的工作副本中,但将它们都放在名为“工作副本”的目录中:

$ svn checkout file:///tmp/repos/test  file:///tmp/repos/quiz working-copies
A  working-copies/test/a
A  working-copies/test/b
Checked out revision 2.
A  working-copies/quiz/l
A  working-copies/quiz/m
Checked out revision 2.
$ ls
working-copies

我怀疑您仍然需要告诉它(签出)每个单独的主干-但您至少还可以使用来签出工作区(以获取所有项目,并因此可以全局更新等)。

您可以使用-N选项,该选项忽略子目录。您可以在第一次签出源时运行此命令:

svn co -N http://path/to/repo
cd repo
for f in Project1 Project2 Project3; do
  svn up -N $f
  svn up $f/trunk
done
并在以后更新中继:

svn up repo/*/trunk

这适用于所有SVN客户端。如果您使用的是SVN 1.5.x客户端,您还可以查看“稀疏目录”,该目录记录在(我还不允许发布链接:-C),它将允许您在存储库目录中运行“SVN更新”。

这在bash中很好地实现了这一点。注意,我重命名了输出文件夹,以使Eclipse在导入项目时更愉快

for f in `svn ls http://path/to/repo`; do svn checkout http://path/to/repo/${f}trunk $f; done

发现此方法有效,而不是上述方法:

checkoutList.bat:

for %%G in (projectA, projectB, projectC) do (
  echo %%G
  mkdir %%G
  svn co http://your.repo/path/%%G/trunk %%G
)

右键单击文件夹-SVN签出。 放置您的URL并单击“选择项目”按钮。 使用复选框选择要包括的子文件夹。

Windows批处理脚本:

@echo off
for /f %%G in ('svn ls https://path/to/main/folder/') do (
    mkdir %%G
    cd %%G
    echo Checking out [%%G] project
    svn co https://path/to/main/folder/%%Gtrunk
)

不是我想听的答案…:-(但无论如何,感谢您快速准确的响应。看起来我今天要写一个脚本。我找到了一个批处理文件来自动化这个过程。批处理文件对我们这些困在Windows上的人来说非常好。您的说明是关于什么操作系统和什么工具的?乌龟?