移动git管理的svn版本库的路径
一、起因
公司采用svn管理源码,因此我一直是用git svn来与svn服务器进行同步。由于当前工作的版本库中包含多个项目,而权限也没有细分,所以每个使用版本库的人都可以管理其他人的项目。这样一旦出现误操作,就会非常难以恢复。我前段时间就 碰上了这样的事情,还好找回了大部分的文件。
解决的办法有两个:
- 自己单独使用git管理源码
- 新建一个独立的svn库并设定独立权限
在windows server 2003上通过cygwin安装git服务器未果后,我只能选择后者了。
二、svn部分
当前工作的版本库的路径为: http://10.0.0.5:8080/svn/kaitian/trunk/fight/KTFight
,其中kaitian是该版本库的根目录。
我在服务器上新建了一个版本库,名为ktfight,路径为:http://10.0.0.5:8080/svn/ktfight
,希望这个版本库对应 http://10.0.0.5:8080/svn/kaitian/trunk/fight
的所有内容。
然后就是转移版本库的工作。原本考虑使用svnsync命令,但发现这个命令仅能sync根目录,不支持子目录。而我不希望新的版本库中保留原来版本库的其他项目的内容,放弃。
后来确定的命令是svndumpfilter,操作如下:
1#备份原始版本库
2svnadmin dump kaitian > kaitian.dump
3#将备份的版本库进行过滤
4type kaitian.dump | svndumpfilter include trunk/fight > fight.dump
这样就得到了一个过滤后的版本库,只包含需要的项目。
原来的项目的路径(相对于版本库根目录)实在很长,可以通过查找和替换缩短路径,方法如下:
使用WinHex打开fight.dump,搜索trunk/fight,将其替换为trunk。这里我原本打算将其直接放在根目录,但替换为/或者替换为空导致最后倒入都不成功,因此就改为替换成trunk了。能短一点就短一点吧。见下面两张图。
1#创建新的版本库
2svnadmin create ktfight
3#载入过滤后的版本库
4svnadmin load ktfight < fight.dump
三、git部分
现在需要将git项目指向新的svn文件夹,我开始的想法是直接修改配置文件中的路径。
在原来的git项目下输入git svn
info,可以看到svn服务器的信息,这里的信息还是指向原来的路径:
1$git svn info
2Path: .
3URL: http://10.0.0.5:8080/svn/kaitian/trunk/fight/KTFight
4Repository Root: http://10.0.0.5:8080/svn/kaitian
5Repository UUID: b60ff3ac-2211-494c-89f2-e927ee7ddff6
6Revision: 191
7Node Kind: directory
8Schedule: normal
9Last Changed Author: zrong
10Last Changed Rev: 191
11Last Changed Date: 2011-03-31 05:25:13 +0000 (星期四, 31 三月 2011)
修改配置文件中的路径:
1git config svn-remote.svn.url http://10.0.0.5:8080/svn/ktfight/trunk/KTFight
2vim .svn/.metadata
可以看到.metadata中的内容如下,注释提醒不应该进行编辑:
; This file is used internally by git-svn
; You should not have to edit it
[svn-remote "svn"]
reposRoot = http://gameserver:8080/svn/ktfight
uuid = b60ff3ac-2211-494c-89f2-e927ee7ddff6
修改reposRoot的值为版本库的根路径(http://10.0.0.5:8080/svn/ktfight)后保存。
使用git svn info查看新的svn信息。
如果成功,恭喜你!!!你比我人品好1000倍!
我当然是没有成功的,看来注释中的提示还是应该遵守DI Orz……
git的错误提示如下:
Unable to determine upstream SVN information from working tree history
于是我使用了一个更笨的方法:
1 git svn clone http://10.0.0.5:8080/svn/ktfight/trunk/KTFight
虽然笨,但够直接。
参考:http://www.aspzz.com.cn/c/man/svn/svn-ch-5-sect-3.html#svn-ch-5-sect-3.1.3
(全文完)
- 文章ID:1288
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/move-svn-path-under-git/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。