Svn 1.7-当工作副本不存在修订时,如何将工作副本切换到重新定位的回购



svn repo中有一个svn项目http://svn/repoA/path1/。将此称为原始回购

此已复制到http://svn/repoA/path2。称之为新回购

我们的一台机器上的本地工作副本,从原始回购中签出,在该副本发生后进行了更新。

然后原始回购被删除。

我们现在希望将工作副本重新整合到新的回购中。

CCD_ 1适用于此。在项目基本目录中运行:

svn switch http://svn/repoA/path2

然而,switch抱怨,因为该项目的修订号在新的回购中不存在。

在svn 1.6中,我会在项目基本目录下递归地更改.svn/entries中的修订号,在那里它以明文形式存储。

在svn 1.7中,这样的信息似乎被不透明地存储(以某种方式编码)到.svn/wc.db或其他新文件中。

我的问题是:如何强制工作副本认为它是复制的修订历史上的现有修订,以便将其切换到克隆的repo文件夹,然后进行更新?

您知道不应该接触那些.svn目录。我敢打赌,即使有一个标签清楚地写着警告:里面没有用户可维修的零件,你也会打开电器的背面。除非需要触电猝死,否则不要打开

是的,我也是。

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

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

SVN开关通常会删除新回购中不存在的文件,并添加新回购中存在的文件。然而,在您的情况下,没有等效的修订版可供切换。因此,svn switch0确实不是这项工作的合适工具。

查看svn import,从签出的工作回购重建旧的"原始"服务器回购。

如果你真的想按照以前的方式来做,请记住SVN现在使用的.SVN目录更少了。在签出的根目录中查找重要的one.svn目录。还要记住,大多数信息不再是用文本文件结构化的,而是在SQLLite二进制数据库中。可以使用与SQLLite兼容的数据库客户端修改数据库条目;然而,这是非常没有人注意的。与使用旧文本文件相比,将工作存储库变成一堆粘稠物的风险要大得多。

如果目的是删除大量修订历史记录,但希望修订号匹配,则需要重新生成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

最新更新