从回购协议中签出一个目录时,`.svn`应该在哪里?
项目(ABC、DEF等)组织在一个SVN存储库中从回购协议中签出一个目录时,`.svn`应该在哪里?,svn,tortoisesvn,Svn,Tortoisesvn,项目(ABC、DEF等)组织在一个SVN存储库中 Repo ------ABC +-----DEF +-----GHI +-----JKL 为了避免签出整个(庞大的)存储库,我(通过TortoiseSVN)只签出了我正在处理的两个项目,DEF和JKL 更新/提交周期对这两种方法都很好,但我对.svn文件的不同位置感到困惑 myproj ------dir1------DEF+-----file1.c +-----
Repo ------ABC
+-----DEF
+-----GHI
+-----JKL
为了避免签出整个(庞大的)存储库,我(通过TortoiseSVN)只签出了我正在处理的两个项目,DEF和JKL
更新/提交周期对这两种方法都很好,但我对.svn
文件的不同位置感到困惑
myproj ------dir1------DEF+-----file1.c
+-----file2.c
+-----.svn
+-----dir2+-----.svn
+-----JKL+-----file3.c
+-----file4.c
从回购中签出一个目录时,.svn
应该在哪里?如果两个位置都正确,那么不同结构的意义是什么
更新
我应该提到,这是两个完全不同的项目,具有完全不同的协作团队,具有完全独立的更新/提交周期。我不确定以这种方式将save SVN repo用于多个项目是否明智
更新2
尽管我希望在这两个项目中的每个项目中独立地进行更新/提交,但我确实希望在签出后在我的工作目录中看到项目的名称(DEF,…)。这给了我一个温和的确认,我在正确的位置。它看起来像是你创建了
dir1
,然后在里面创建了DEF
,然后在上面签出了DEF
(通过它的路径Repo/DEF
)。您还创建了dir2
,然后在其上签出Repo
(通过其路径Repo
),但只在其中选择了JKL
,这就是所谓的稀疏工作副本(您单击了一个按钮“选择项目…”,并在附加窗口中只选择了JKL文件夹,取消了所有其余内容)
如果您在dir2
中创建了JKL
并在其上签出JKL
(通过其路径Repo/JKL
),那么.svn文件夹将位于JKL
.svn
属于工作副本根\。存储库结构并不重要,因为工作副本可以指向repo中的任何文件夹
- 保存工作副本的目录的名称由您选择。你甚至可以重命名它,在Subversion中没有任何东西会被破坏
嗯,差不多了。如果您使用文件夹签出一个工作副本,您将在外部根目录中获得另一个.svn
目录,可能在外部工作副本中找到deepe
如果所有项目布局都相同,则不会以相同的方式执行两个签出:
- 对于
DEF
,您在/myproj/dir1/DEF/
上有一个指向file:///Repo/DEF
- 对于
JKL
您在/myproj/dir2
上有一个指向file:///Repo/
仅包括file:///Repo/JKL
并排除其同级
我认为这令人困惑,很可能是一个非自愿的错误。但是,我坚持认为,工作副本的布局不需要与存储库的布局相匹配。所以你说DEF是正确的;.svn
文件应该在(子)项目目录中,并且JKL不正确;.svn
文件不应与(子)项目目录处于同一级别;是吗?@Vrokipal实际上这两个都是不正确的,因为如果你想更改两个文件夹中的代码并提交它,你必须在两个单独的操作中提交它。但为了对当前目录结构具有单一提交功能,您必须创建另一个存储库(或当前存储库中的某个新文件夹),并将DEF和JKL添加到其中,称为“externals”。如果当前目录结构(使用dir1
和dir2
)不重要,您可以使用目录结构,其中DEF和JKL在同一文件夹中相邻,然后您可以从Repo
path签出,并使用稀疏签出仅选择这两个。虽然通常不可能同时提交多个外部,但如果所有外部都属于同一个存储库,则TurtoiseSVN有一段智能代码可以实际执行此操作。我的第三条注释应该位于前两条之间,因为它为“外部”添加了更多信息好主意。那么你是说这两个选择中的任何一个都可以。这只是我们将“工作副本根目录”定义在哪里的问题。一种情况是myproj
,另一种情况是myproj/subdir
。无论哪种方式都不会造成伤害,而且任何标识符(myproj、myproj或subdir)也可以在没有伤害的情况下进行更改。是吗?你的工作副本比我高一级。请让我知道我的更新答案是否解决了您的问题。可以安全地重命名/myproj/dir1/DEF/
和/myproj/dir2
之前的所有文件夹。
Repo ------ABC
+-----DEF
+-----GHI
+-----JKL