我有任务提取一个Subversion(1.6)存储库的子目录,并将其放入一个新的自己的存储库。
出于几个原因,我想使用svnsync将子目录复制到新的存储库中。 我现在想确保这是安全的,因为SVNBook说( 颠覆1.5 )
svnsync对镜像库中所做的更改非常敏感,这些更改并非作为镜像操作的一部分。 为防止发生这种情况,最好是svnsync进程是唯一允许修改镜像库的进程。
和( 颠覆1.6 )
警告
请勿修改镜像存储库,以使其版本历史logging与其所镜像的存储库的版本历史logging不同。 该镜像存储库上唯一发生的提交和修改属性修改应该是由svnsync工具执行的。
我假设这是有效的,如果你想使用svnsync实际保持镜像最新。
我们的用例是
任何人都可以确认这个用例是可行的吗?
在这个位置上,我总是更喜欢使用dump-> filter-> load方法来完成这种任务,因为它是最干净的路线。 (虽然我意识到这是相当耗时的大型仓库)。 你的情况有什么可以排除这个吗?
也就是说,在同步之后,你将会得到一个完整的function库,所以它应该可以工作。 为了彻底rest一下,在第一次同步之后,针对您的镜像仓库执行以下操作:
svnlook pl -v --revprop -r0 <path to repo root>
您将看到svnsync init命令创build的三个svn:sync …属性。 我build议删除它们,然后再使其可写。 我不认为这是绝对必要的,但是它应该防止意外事件发生(例如在两个存储库分开后重新同步)。
我仍然推dump-> filter-> load作为正确的路线,虽然…(哦,并标记旧的子目录,然后从头删除它)。
由于我不得不调整目标资源库中的目录,所以我最终做了这个(旧的repo有一个/ SOME / DIR /的path前缀,我想摆脱):
svnsync init [new repo URL] [old repo URL] svnsync sync [new repo URL] svnadmin dump [new repo PATH] >REPO.dump svndumptool.py merge -i REPO.dump -s '^SOME\/DIR\/' '' -x SOME -x SOME/DIR -o REPO_filtered.dump mv [new repo PATH] [away] svnadmin create [new repo PATH] svnadmin load --force-uuid [new repo PATH] <REPO_filtered.dump