svn repo http://svn/repoA/path1/中有一个svn项目。请调用此原始回购。
这被复制到http://svn/repoA/path2。将此新回购称为。
我们的其中一台机器上的本地工作副本,从原始仓库检出,在此副本发生后进行了更新。
然后原始回购被删除。
我们现在希望将工作副本重新整合到新的回购中。
svn switch
适用于此。在项目基目录中运行:
svn switch http://svn/repoA/path2
但是,switch
会抱怨,因为项目的修订号在新仓库中不存在。
在svn 1.6中,我会在项目基础目录下以递归方式更改.svn/entries
中的修订号,并以明文形式存储。
在svn 1.7中,这些信息似乎不透明地(以某种方式编码)存储到.svn/wc.db
或其他新文件中。
我的问题是:如何强制工作副本认为它是复制的修订历史记录的现有修订版,以便我可以将其切换到克隆的repo文件夹,然后更新它?
答案 0 :(得分:0)
您知道您不想触摸那些.svn
目录。我打赌你也打开了电子设备的背面,即使有一个标签清楚地说明 警告:里面没有用户可维修的部件。除非需要通过触电致突然死亡,否则不要打开 。
是的,我也是。
您仍然可以在旧工作目录上执行svn status
以查找已更改的文件,然后将这些文件复制到新的工作目录中。即使旧存储库不存在,svn status
也会起作用。
或者,您可以在另一个目录中签出新的工作副本,从旧的工作副本中删除所有旧的.svn
目录,然后将所有这些文件复制到新的工作目录中。然后,您可以执行svn status
查找已更改的内容,并修复这些问题。
答案 1 :(得分:0)
SVN交换机通常会删除新存储库中不存在的文件,并添加新存储库中存在的文件。但是,在您的情况下,没有相应的修订可以切换到。因此,svn switch
确实不适合这项工作。
查看svn import
以从已签出的工作回购中重建旧的“原始”服务器仓库。
如果你真的想以你以前的方式去做,请记住SVN现在使用更少的.svn目录。查看结帐的根目录,查找重要的.svn目录。还要记住,大多数信息不再使用文本文件构建,而是在SQLLite二进制数据库中构建。可以使用SQLLite兼容的数据库客户端修改数据库条目;但是,这是非常不推荐的。与使用旧文本文件相比,您将工作存储库变成一堆粘性的风险要大得多。
如果意图删除大量修订历史记录,但您希望reivsion编号匹配,则需要重建repo1以使其缺少不需要的历史记录,但修订版编号匹配。为此,
svnadmin dump /path/to/repo2 -r<start>:<end> > svn.dump
svnadmin create /path/to/repo1
svnadmin load /path/to/repo1 < svn.dump
或者在我的假例子中,rev 8323是要保留的最后一段历史记录,当前转速为9929。
svnadmin dump /path/to/repo2 -r8323:9929 > svn.dump
svnadmin create /path/to/repo1
svnadmin load /path/to/repo1 < svn.dump