我有一个大型的Subversion存储库,在大约500,000个文件中分布着近15 GB的数据.现在我需要将此存储库签出到远程主机,这需要数天才能完成.
我正在检查的主机已经拥有存储库中数据的完整副本.但是看到文件没有直接从存储库中检出,它们不构成工作副本(没有".svn"文件夹).
我想避免在网络上复制所有这些数据,特别是当它已经存在于目标主机上时.有没有我可以使用的技巧,将一个预先存在的目录转换为工作副本,而不用存储库中相同的副本替换本地文件?
Rhu*_*arb 25
从SVN 1.7开始(但不是之前),您可以通过以下方式轻松完成:
svn co --force http://path/to/repo
这会将本地副本视为现有副本,并且您将在输出中的每个文件名之前看到"E"表示存在:
E some/existing/file
如果文件与存储库不同(新的或修改过的),它将根据本书优雅地处理:
在版本1.7之前,如果您尝试检查现有目录顶部的目录,Subversion将默认投诉,该目录包含结帐本身将创建的文件或子目录.Subversion 1.7以不同的方式处理这种情况,允许结帐进行,但将任何阻碍对象标记为树冲突.使用--force选项覆盖此安全措施.当您使用--force选项签出时,结帐目标树中通常会阻碍结帐的任何未版本化文件仍会变为版本,但Subversion将按原样保留其内容.如果这些内容与该路径中的存储库文件(作为结帐的一部分下载)不同,则该文件似乎具有本地修改 - 将您签出的版本化文件转换为检查前的无版本文件所需的更改结账时结账时间.
另请注意,SVN 1.7可能会导致这是一个更常见的问题(可能会激发解决方案).将子目录移动到磁盘上的新位置时遇到此问题.在1.7之前的版本中.svn,它会用它移动目录,它本身就可以了.在1.7中,该目录实际上是无版本的.但svn co --force救了一天.
有重定位命令:http://svnbook.red-bean.com/en/1.1/re27.html
编辑:如果本地文件未链接到存储库,那么您可以创建一个本地存储库,将文件导入其中,然后使用重新定位命令。
或者,如果您对两台计算机都有物理访问权限,则可以在本地查看存储库,然后通过外部硬盘将文件复制到远程计算机。