我如何到达
经过艰苦地合并了2个应该是相同代码库的不同文件夹(不同的人在不同的位置工作),我试图通过将其中一个文件夹设置为svn:external
来无缝地整合代码库。另一个。
这没有用,因为外部人员不能与他们的链接在同一个回购中。我想我在发现这个问题后试图解决svn产生的错误(没有任何东西被锁定,这似乎表明我做了)。{/ 1>}我跑了svn cleanup
。
我想要什么
在建立此项时,我忘记了svn:externals
属性的设置位置:该文件夹的svn status
为S
(表示其内容位于不同的存储库位置它的本地位置可能会推断),svn info
显示它仍然映射到其对应方。我怎样才能完全解决这个问题?
我尝试了什么
svn属性的难点在于可以从任何地方设置它们。我已经从相关文件夹中尝试了svn propedit svn:externals .
,并且我还在其所有祖先上尝试了svn propedit svn:externals {relative-path-to-the-folder}
,但没有骰子。
答案 0 :(得分:2)
您可以使用-R
命令的svn propget
参数来遍历整个目录树:(注意:pg
是propget
的别名)
$ svn pg -R svn:externals .
这将列出设置svn:externals
的所有目录。请注意,您也可以使用URL执行此操作:
$ svn pr -R svn:externals http://repo/svn/trunk/proj
您可以使用proplist
命令执行相同的操作,并获取所有属性及其值。但是,这可能比您意识到的要多得多 - 特别是如果您因为二进制文件类型而设置了很多svn:mimetype
。
$ svn pl -R -l .
这对于svn:mergeinfo
,svn:ignores
以及可能存在问题的其他类型的属性非常有用。
svn:externals
是一个强大的工具,但是像任何强大的工具一样,你最终可能会造成很大的伤害。例如,假设我有这个集合:
$ svn ps svn:externals http://repo.corp.local/svn/trunk/util util .
我们现在说我现在标记了我的目录。我的util
目录仍将指向trunk并不断更改,这意味着我的标记正在发生变化。如果我创建了一个我的项目的分支,util
目录将指向主干,它可能最终包含与我的分支不兼容的代码。
有两种方法可以解决这个问题:
像这样:
$ svn -r$rev ps svn:externals http://repo/svn/trunk/utls@$rev util .
将外部与特定修订绑定,或者:
$ svn ps svn:externals http://repo/svn/tags/$tag/util util .
将外部链接到特定标记。我喜欢这个,因为标签通常更有意义(虽然标签可以更改,但它们通常应该是不变的。)
像这样:
$ svn ps ../util util .
假设您的主干,标签和分支目录结构是主要级别,这将确保util
目录指向与项目相同的分支,主干或标记。分支项目时,还需要分支util
。标记项目时,您还需要标记util
。