Git-svn
Posted Git开源社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git-svn相关的知识,希望对你有一定的参考价值。
Git 中所有 Subversion 桥接命令的基础是 git svn
。所有的命令都从它开始。相关的命令数目不少,你将通过几个简单的工作流程了解到其中常见的一些。
值得警戒的是,在使用 git svn
的时候,你实际是在与 Subversion 交互,Git 比它要高级复杂的多。尽管可以在本地随意的进行分支和合并,最好还是通过衍合保持线性的提交历史,尽量避免类似与远程 Git 仓库动态交互这样的操作。
避免修改历史再重新推送的做法,也不要同时推送到并行的 Git 仓库来试图与其他 Git 用户合作。Subersion 只能保存单一的线性提交历史,一不小心就会被搞糊涂。合作团队中同时有人用 SVN 和 Git,一定要确保所有人都使用 SVN 服务来协作——这会让生活轻松很多。
初始设定
为了展示功能,先要一个具有写权限的 SVN 仓库。如果想尝试这个范例,你必须复制一份其中的测试仓库。比较简单的做法是使用一个名为 svnsync
的工具。较新的 Subversion 版本中都带有该工具,它将数据编码为用于网络传输的格式。
要尝试本例,先在本地新建一个 Subversion 仓库:
$ mkdir /tmp/test-svn
$ svnadmin create /tmp/test-svn
然后,允许所有用户修改 revprop —— 简单的做法是添加一个总是以 0 作为返回值的 pre-revprop-change 脚本:
$ cat /tmp/test-svn/hooks/pre-revprop-change
#!/bin/sh
exit 0;
$ chmod +x /tmp/test-svn/hooks/pre-revprop-change
现在可以调用 svnsync init
加目标仓库,再加源仓库的格式来把该项目同步到本地了:
$ svnsync init file:///tmp/test-svn http://progit-example.googlecode.com/svn/
这将建立进行同步所需的属性。可以通过运行以下命令来克隆代码:
$ svnsync sync file:///tmp/test-svn
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
Committed revision 3.
...
别看这个操作只花掉几分钟,要是你想把源仓库复制到另一个远程仓库,而不是本地仓库,那将花掉接近一个小时,尽管项目中只有不到 100 次的提交。Subversion 每次只复制一次修改,把它推送到另一个仓库里,然后周而复始——惊人的低效,但是我们别无选择。
以上是关于Git-svn的主要内容,如果未能解决你的问题,请参考以下文章