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的主要内容,如果未能解决你的问题,请参考以下文章

git-svn — 让git和svn协同工作

Linux实用命令之git-svn

使用 git-svn 时模拟 subwcrev

git-svn 的钩子

由于需要 ***,git-svn 拒绝了基本挑战

如何在 git-svn 中设置上游分支?