2012-02-02 47 views
0

svn回购http://svn/repoA/path1/中有一个svn项目。致电原始回购Svn 1.7 - 如何在工作副本不存在修订版本时将工作副本切换到重定位的回购

这被复制到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

你知道你并不是想要触摸那些.svn目录。我敢打赌,你也打开了电子设备的背面,即使有一个标签明确表示警告:内部没有用户可维修的零件。不要打开,除非电击需要猝死

是的,我也是。

您仍然可以在旧的工作目录上执行svn status以查找更改后的文件,然后将这些文件复制到新的工作目录中。即使旧的存储库不存在,svn status也可以工作。

或者,您可以在另一个目录中签出新的工作副本,从旧的工作副本中删除所有旧的.svn目录,然后将所有这些文件复制到新的工作目录中。然后,您可以执行svn status来查找更改内容,并解决这些问题。

0

SVN交换机通常会删除新回购站中不存在的文件,并添加新回购站中存在的文件。但是,在你的情况下,没有等效的修改切换到。因此,svn switch真的不适合这份工作。

调查svn import重建检出的工作回购旧的“原始”服务器回购。

如果您真的想按照以前所做的方式进行操作,请记住,SVN现在使用的.svn目录较少。查看结账的根目录,查看重要的.svn目录。同时请记住,大部分信息不再由文本文件构成,而是在SQLLite二进制数据库中。用SQLLite兼容的数据库客户端修改数据库条目是可能的;然而,这是非常不推荐的。与使用旧文本文件相比,将工作存储库转换为一堆goo的风险更大。

如果意图是删除大量修订历史记录,但您希望reivsion编号匹配,则需要重新构建repo1,以便缺少不需要的历史记录,但版本号匹配。要做到这一点,

svnadmin dump /path/to/repo2 -r<start>:<end> > svn.dump 
svnadmin create /path/to/repo1 
svnadmin load /path/to/repo1 < svn.dump 

或者在我的假例如,修订版8323是历史的最后一位被保留,并且当前转速为9929.

svnadmin dump /path/to/repo2 -r8323:9929 > svn.dump 
svnadmin create /path/to/repo1 
svnadmin load /path/to/repo1 < svn.dump 
+0

感谢您的信息。我认为修改版本号会起作用,因为wc与新的repo共享血统,并且自从共同修订以来一直没有改变,这只是一个修订,之后没有任何更改。我正在寻找最简单的方法,最好的生成冲突信息,而不用愚蠢的差异覆盖。 – KomodoDave 2012-02-02 19:33:27