Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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_Tortoisesvn - Fatal编程技术网

从回购协议中签出一个目录时,`.svn`应该在哪里?

从回购协议中签出一个目录时,`.svn`应该在哪里?,svn,tortoisesvn,Svn,Tortoisesvn,项目(ABC、DEF等)组织在一个SVN存储库中 Repo ------ABC +-----DEF +-----GHI +-----JKL 为了避免签出整个(庞大的)存储库,我(通过TortoiseSVN)只签出了我正在处理的两个项目,DEF和JKL 更新/提交周期对这两种方法都很好,但我对.svn文件的不同位置感到困惑 myproj ------dir1------DEF+-----file1.c +-----

项目(ABC、DEF等)组织在一个SVN存储库中

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