18

如何更改(重新定位)使用“svnsync init”创建镜像存储库时输入的 subversion url(例如 from #https://whateverto svn://whatever)?

尝试使用新 url 再次运行 svnsync init 但

svnsync init file:///<path_to_mirror> http:///<new_url>
svnsync: Destination repository is already synchronizing from 'http:///<old_url>'
4

3 回答 3

22

sync-from URL 作为 revprop 存储在镜像仓库中。如果在有镜像仓库的机器上(我的情况),使用svnlook工具查看,使用svnadmin进行更改:

user@q.r[~]$ svnlook pg --revprop -r0 /path/to/mirror/repo svn:sync-from-url
svn+ssh://svn.abc.com:1234/svn/foo

您将看到您的镜像当前正在同步到的存储库的 URL。在上面的示例中,主存储库 URL 以 ... /foo结尾。它的末尾可能没有换行符,因此您的 shell 提示符可能会跟随。现在你需要把它放到一个文件中,因为 svnadmin 使用一个文件作为输入来改变 revprops。

user@q.r[~]$ svnlook pg --revprop -r0 /path/to/mirror/repo svn:sync-from-url > t.txt

现在编辑t.txt以将 URL 更改为主存储库。这可能导致换行符出现在t.txt的末尾,并导致来自 svnsync 的模糊/无意义的错误消息。所以摆脱它:

user@q.r[~]$ cat t.txt | tr -d '\n' > t2.txt

请注意,我们现在有t2.txt,它是经过清理的文件。然后使用svnadmin将 revprop 更改为刚刚编辑和清理过的文件的内容:

user@q.r[~]$ svnadmin setrevprop /path/to/mirror/repo -r0 svn:sync-from-url t2.txt

请注意,使用 t2.txt 而不是 t.txt。最后,检查您的更改:

user@q.r[~]$ svnlook pg --revprop -r0 /path/to/mirror/repo svn:sync-from-url
svn+ssh://svn.def.com:5678/svn/foo

您应该会立即看到新的 repo URL,然后是 shell 提示符,没有换行符。在上面的例子中,URL 以 foo 结尾,紧接着是 shell 提示符 user@qr[~]$。

于 2010-11-29T22:38:29.467 回答
14

如果您使用用于运行 svnsync 的帐户,您可以简单地使用:

svn propset --revprop -r 0 svn:sync-from-url http://my.new/url url://to.my.repo

如果您按照手册中的说明添加了一个 pre-rev-props 钩子,该钩子拒绝除 svnsync 用户之外的所有人更改 rev 道具,这应该可以工作。

于 2011-06-16T08:57:41.263 回答
1

Svnsync将远程存储库 URL 存储在存储库镜像的第一个修订版的修订属性中。因此,您可以像这样在本地镜像上查看当前配置的存储库 URL:

$ svn pg --revprop -r0 svn:sync-from-url file:///path/to/svn-mirror

这意味着要更改远程存储库 URL,您只需更改修订属性。例如:

$ svn ps --revprop -r0 svn:sync-from-url https://svn.example.org/repo \
         file:///path/to/svn-mirror/

示例输出:

property 'svn:sync-from-url' set on repository revision 0
于 2017-07-28T20:38:05.593 回答