我是SVN的新手,所以这可能是一个简单的问题.
我们有一个带有第一级目录的"主干":
10 <-- documents
20 <-- source code, db scripts, ...
30 <-- documents
40 <-- referenced 3rd party library-es
Run Code Online (Sandbox Code Playgroud)
我从"后备箱"做了一个"开发"分支.在"开发"中,我们更改了源代码,在测试之后,我们将其合并到"trunk".
目录"10"和"30"中的问题是存储了开发不需要的*.doc文件,因此需要"develop"分支没有这些目录.
解决方案仍应:
编辑:我忘了提到"源代码"不仅在20中.有引用的dll-s和构建脚本等也在第1级目录,比方说40.
kdg*_*ory 11
如果我正确地阅读了你的问题,这是一个简单的问题,使用svn copy只将所需的目录复制到一个分支 - 基本上,Mike Kushner和Ivan Krechetov的答案组合.但是,我认为,在自己完成这些步骤之后可能会更容易理解,因此本文的其余部分将创建一个示例存储库并显示副本和合并.
我假设你正在使用"标准"存储库布局,它在顶层有三个子目录,trunk,branches和tags.而且,你的10,20,30,和40目录正在树干.换一种说法:
trunk
10
20
30
40
branches
tags
Run Code Online (Sandbox Code Playgroud)
而且,正如迈克指出的那样,你的目标是建立一个如下所示的结构:
trunk
10
20
30
40
branches
sandbox
20
40
tags
Run Code Online (Sandbox Code Playgroud)
目前还不清楚从你的帖子(至少当前编辑为- ),但你可能在其中的目录结构10,20,等人都在顶层.在这种情况下,您需要创建一个新的顶级目录,我将其称为dev,以便您的整个存储库如下所示:
10
20
30
40
dev
20
40
Run Code Online (Sandbox Code Playgroud)
请注意,您无法在20以下创建dev.嗯,身体上你可以,但你几乎可以保证在这样做时打破你的构建.
好的,让我们来看一个例子,我们在其中创建一个新的存储库并在其中放入一些文件.你必须能够运行svnadmin命令(你应该能够做到这一点,除非你有一个偏执的系统管理员).因此,选择一个临时目录,并执行以下命令(我正在运行Linux;如果您运行Windows,命令将是相同的,但您需要在REPO变量中放置特定于Windows的路径):
svnadmin create temp.repo
REPO="file://`pwd`/temp.repo"
svn co $REPO temp
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的(空)存储库,并检出它的工作副本.第二行需要一些解释:它只是从当前目录创建存储库URL.在我的工作区目录中,URL如下所示:
file:///home/kgregory/Workspace/temp.repo
Run Code Online (Sandbox Code Playgroud)
好的,既然你已经有了工作副本,那就让我们创建一个示例目录结构和一些文件:
cd temp
svn mkdir trunk
svn mkdir branches
svn mkdir tags
svn commit -m "standard repo structure"
pushd trunk
svn mkdir 10
svn mkdir 20
svn mkdir 30
svn mkdir 40
svn commit -m "example sub-project structure"
echo "this doesn't change" > 10/dontchange.txt
svn add 10/dontchange.txt
echo "this does change" > 20/change.txt
svn add 20/change.txt
svn status
svn commit -m "example files"
popd
Run Code Online (Sandbox Code Playgroud)
此时我们有示例目录和两个文件.这是find的输出,不包括subversion的隐藏目录:
temp, 531> find . | grep -v svn
.
./tags
./trunk
./trunk/10
./trunk/10/dontchange.txt
./trunk/30
./trunk/20
./trunk/20/change.txt
./trunk/40
./branches
Run Code Online (Sandbox Code Playgroud)
下一步是创建沙箱目录,并复制将要包含在其中的两个目录:
svn mkdir branches/sandbox
pushd branches/sandbox
svn copy ${REPO}/trunk/20 .
svn copy ${REPO}/trunk/40 .
svn commit -m "make development branch"
popd
Run Code Online (Sandbox Code Playgroud)
这是重要的部分:我在工作目录中创建分支和副本,作为存储库中的副本.通常,您只需使用带有两个存储库参数的svn副本复制trunk到子级中.这在这里不起作用,因为我们只想要两个孩子.branchestrunk
执行此操作后,我的工作副本如下所示:
temp, 539> find . | grep -v svn
.
./tags
./trunk
./trunk/10
./trunk/10/dontchange.txt
./trunk/30
./trunk/20
./trunk/20/change.txt
./trunk/40
./branches
./branches/sandbox
./branches/sandbox/20
./branches/sandbox/20/change.txt
./branches/sandbox/40
Run Code Online (Sandbox Code Playgroud)
此时,您通常会将开发分支检出到新的工作目录并在那里工作.所以我会这样做(在cd回到我的Workspace目录之后):
svn co ${REPO}/branches/sandbox sandbox
cd sandbox
Run Code Online (Sandbox Code Playgroud)
现在做一些改变:
vi 20/change.txt
svn commit -m "changed on branch"
Run Code Online (Sandbox Code Playgroud)
好的,现在是时候合并回主干了.所以回到工作区,看看后备箱:
svn co ${REPO}/trunk trunk
cd trunk
Run Code Online (Sandbox Code Playgroud)
并从沙箱合并.Subversion文档中描述了合并过程:
svn merge -r 4:5 ${REPO}/branches/sandbox
svn status
Run Code Online (Sandbox Code Playgroud)
最后一个命令应该显示只有文件20/change.txt受到合并的影响.由于您没有将10或30个目录复制到分支中,因此合并不会触及它们.
| 归档时间: |
|
| 查看次数: |
3782 次 |
| 最近记录: |