将单个SVN目录(包括历史记录)移动到其他代码库中

42

相关问题: 如何将仓库的主干移动到另一个分支(保留历史记录)


我知道可以通过以下命令将一个包含历史记录的完整 SVN 仓库导出,并加载到目标仓库的用户定义的(子)目录中:

// in source repo
> svnadmin dump . > mydumpfilename

// in destination repo (backslashes because I'm using Windows)
> svnadmin load . < mydumpfilename --parent-dir some\sub\directory

但这将把整个存储库导入到目标存储库的子目录中。我想要的是在源存储库中定义一个应该被导出的子目录。类似于 svnadmin dump . --source-path old\sub\dir > mydumpfilename

我该如何实现呢?如果TortoiseSVN可以做到,请告诉我;)


解决方案:感谢Tim Henigan的答案,以下是正确的方法:

// execute in destination repo
svndumpfilter include source\sub\dir < mydumpfilename | svnadmin load . --parent-dir destination\sub\dir

希望这也能帮助其他人...


我认为你不能这样做,除非手动复制并重新应用每个更改,因为Subversion修订是存储库范围内的,因此移动具有历史记录的单个目录在这种情况下并不适用。即不是单个文件被修订,而是整个存储库被修订,并且整个存储库的差异被存储。 - Zenon
2
实际上这只是故事的一半。您还需要通过使用“svndumpfilter exclude source\sub\dir”重建源代码库中的目录来删除目录,当然,参见https://dev59.com/anVC5IYBdhLWcg3wtzkQ。 - Tino
1
为避免空填充修订版本,应考虑在命令行中添加“--drop-empty-revs --renumber-revs”。请参见https://dev59.com/A2HVa4cB1Zd3GeqPp8J-。 - smkanadl
1个回答

21

请查看svndumpfilter和关于仓库维护的这个部分。

一旦你拥有了整个旧仓库的转储文件,你可以使用svndumpfilter来提取你想要的部分。

我不知道如何使用TortoiseSVN完成这个任务。


如果您对为什么在本地机器上无法运行感到困惑,那是因为 svndump 应该在实际的存储库源上运行。请改用 svnrdump -- https://dev59.com/PWox5IYBdhLWcg3w9o6h - drzaus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接