有没有一种简单的方法可以查看Subversion中的每个修订版本?目前,如果我想这样做,我将不得不单独检查每个修订。
为了回答不可避免的“为什么你需要这个?”,我将使用离线计算机,并希望能够在不连接到互联网的情况下测试旧的代码状态。我可能不需要一直回去,但我仍然希望能够进行所有修改。
答案 0 :(得分:6)
您可以使用svnsync在本地克隆存储库。 svnsync不需要任何额外的访问级别,而不是您已有的访问级别,您将获得存储库的完整副本。请注意,如果存储库很大,则可能需要一些时间。
svnsync在svnbook中记录在这里: http://svnbook.red-bean.com/en/1.7/svn.ref.svnsync.html
一般过程将是。
创建新存储库:
svnadmin create mirror
初始化同步(其中URL是您的Google代码库根目录):
svnsync initialize file://`pwd`/mirror $URL --source-username user --source-password pass
然后,您可以更新同步以匹配当前的仓库:
svnsync synchronize file://`pwd`/mirror
请注意,我在URL中使用pwd
命令的文件,如果您愿意,可以使用完整路径,因此您不必保留在同一目录中。
然后,您可以重新定位现有的工作副本以使用本地镜像(其中WC是您的工作副本路径,而URL是Google代码库的URL):
svn switch --relocate $URL file://`pwd`/mirror $WC
返回Google代码存储库就像(其中URL是您的Google代码库的网址)一样简单:
svn switch --relocate file://`pwd`/mirror $URL $WC
如果您想继续从Google代码回购中同步,我不会提交。但是,如果您无意更新,则可以提交,然后svnadmin dump
仅限于您在本地存储库中更改的版本,并使用svnrdump load
将其发送到Google代码服务器。
git-svn是另一种选择。但上述内容应该可以通过现有的SVN安装来完成。
答案 1 :(得分:3)
我强烈建议您使用GIT。
通过使用git-svn,您将能够克隆svn存储库,获取每个修订版本并创建相应的GIT存储库。
使用包含所有版本的GIT仓库,您可以在该离线计算机中执行任何操作。
答案 2 :(得分:2)
不像Adrian Shum的解决方案那么好,但如果你真的更喜欢坚持使用SVN,你也可以使用svnsync。来自stackoverflow上的Stefan's answer:
首先,在您的家庭计算机上创建一个新的存储库。
svnadmin create c:\backuprepo
接下来,创建一个名为pre-revprop-change.bat的文件:
echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat
然后,初始化同步:
svnsync init file:///c:/backuprepo https://url/of/your/repository
之后,您只需运行
即可svnsync sync file:///c:/backuprepo
每天一次左右,您将只获得备份存储库中尚未存在的更改。第一次需要一段时间,但在您将备份存储库与真实存储库同步后,只需几秒钟就可以同步它,因为只需要同步那些新版本的修订版。
答案 3 :(得分:0)
回答问题
您可以在oder中使用svn export
1-st表单在任何修订版本中导出到repo的无版本树状态。来自svn help export
export [-r REV] URL[@PEGREV] [PATH]
...
Exports a clean directory tree from the repository specified by
URL, at revision REV if it is given, otherwise at HEAD, into
PATH.
您可以轻松编写最简单的脚本,该脚本在repo中的所有修订版中运行,并执行导出到更改目标路径的更改
回答没问的问题“如何克隆任何远程回购”
在Subversion 1.7。*中添加了新的管理工具:svnrdump
,允许执行svnadmin dump|load
,但远程存储库。
在你的情况下你:
svnadmin load
dump to repo 关于svnrdump的最终说明
Svnrdump是Subversion 1.7.X中客户端工具的一部分。任何 1.7客户端都可以自由地与 1.6服务器进行通信
答案 4 :(得分:0)
工具rsvndump完全达到了这个目的。