我有一组存储库,结构类似于以下结构:
/Source
/branches
/tags
/trunk
/FolderP
/FolderQ
/FolderR
/Target
/branches
/tags
/trunk
/External
/Library1
/Library2
/Library3
/Internal
/FolderA
/FolderB
/FolderC
/FolderX
/FolderY
/FolderZ
我想将文件夹/ Source / trunk / FolderP,/ Source / trunk / FolderQ和/ Source / trunk / FolderR移动到/ Target / trunk / Internal,以便:
然后我应该有以下存储库结构:
/Target
/branches
/tags
/trunk
/External
/Library1
/Library2
/Library3
/Internal
/FolderA
/FolderB
/FolderC
/FolderP
/FolderQ
/FolderR
/FolderX
/FolderY
/FolderZ
在移动过程中必须保持历史。
我已经看过以前提出过的两个看似相似的问题:
我对建议的解决方案没有太多运气。具体来说,当我运行svndumpfilter命令时出现错误,该命令指出:
svndumpfilter: Invalid copy source path `/branches/name-of-a-branch/.../File.cs`
发生了什么,我该如何解决这个问题?
修改
我目前正在尝试的一个解决方法是:
注意:上面假设svn正在维护X:\ Repositories文件夹中的所有存储库,并且正在使用X:\ Dumps文件夹作为工作文件夹。
这显然会破坏修订号,但会保留历史记录。希望您的提交注释不包含对修订号的引用。
其他人提到了一个svndumpfilter3 Python脚本,但是我从未使用过Python,也不想学习使用Python,只是为了这个。
答案 0 :(得分:2)
除非您还要更改FolderP
,FolderQ
和FolderR
的历史记录,否则为什么不将svn move
改为Internal
?
请注意,svnadmin load
会选择--parent-dir arg
,其中arg
是您希望导入的转储显示在其中的父文件夹。所以
svnadmin load --parent-dir /trunk/Internal dump_of_source_repo target_repo
应该导入目标仓库中/trunk/Internal
下的所有源仓库。
答案 1 :(得分:1)
以下解决方法是针对filipenf所在的特定情况,即无法访问Subversion服务器上的svnadmin。
如果您可以在用于存储存储库的文件夹中将文件物理移动到Subversion服务器上,那么您很幸运。
在执行以下任何操作之前,请进行备份,以防数据意外损坏。永远不要过分强调自由使用备份。现在,解决方法:
这应该会在Subversion服务器公司中为您提供新的存储库,其中包含所有历史记录。
然后,您可以使用svn:external属性将此新存储库中的代码引入公司Subversion服务器上的其他存储库。
请注意,这涉及物理将文件复制到公司Subversion服务器上的能力,而不是使用Subversion服务器发布的用户界面创建新的存储库或文件夹。强>
答案 2 :(得分:0)
为此,我在TortoiseSVN 版本1.9.4 +中找到了的大力支持:
TortoiseSVN > Show log
)Merge revisions to...
这种方法剥离历史并且可能仅在某些情况下有效,但我的情况显然恰好是其中之一(这就是为什么我喜欢TSVN:它really helps its users)。
背景故事:
我试图说服一所大学将一个小型(“玩具”)项目置于版本控制之下,所以我清理了我们的SVN“playground”存储库。然后他承诺所有他认为这是源代码(当然远不止于此),然后我添加了适当的忽略模式,他立即开始在VC下做生产性工作(忘记这一切都发生在“游乐场”回购中)。现在我不得不说服他转移到一个持久的存储库并搜索一个易于应用且易于教授的方法,以使他能够在新站点中进行第一次提交。 / p>