使用git作为svn中管理的代码库的部署机制?

时间:2012-02-17 15:31:50

标签: git svn deployment git-svn

我目前正在将phpfog视为一个由小团队维护的大量应用程序的平台。我喜欢git,并且非常喜欢他们让你通过git推送到phpfog平台。

我正在寻找托管的应用程序目前都在SVN中受版本控制。不幸的是,由于我无法控制的许多无聊的原因,这种情况无法改变。

我正在尝试找到一个好的工作流程,以允许此SVN存储库和phpfog平台之间的持续集成。本质上,构建服务器应检查SVN中是否有修改,如果是,则将其拉下来,然后使用更改git push到phpfog。我有一个安装了git和svn的构建服务器,但我遇到了一些问题。

到目前为止,我尝试过的主要事情是在svn repo上做git svn clone,将phpfog添加为远程,然后推送到那个。然而,这失败了:

$ git push phpfog master
To git@git01.phpfog.com:example.phpfogapp.com
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@git01.phpfog.com:example.phpfogapp.com'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

我认为问题在于phpfog有一个我希望首先克隆出来的git存储库,但是git svn创建了自己的存储库。

我反过来尝试了,从phpfog克隆空的repo并尝试在repo中做某种git svn clone,但这似乎也没有用。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

我不确定这是不是最好的方法,但这是你可以试试的。如果你纯粹部署到PHPFog并且不使用那个repo进行版本控制,你可以尝试每次强制推送。

git push --force

答案 1 :(得分:1)

考虑使用SubGit

如果您可以本地访问Subversion存储库,则可以将SubGit安装到其中:

    $ subgit install $SVN_REPOS

之后,您将获得$ SVN_REPOS / .git Git存储库,并且它会与初始SVN存储库持续同步。您可以像往常一样使用创建的Git存储库。

提交到SVN的每个新修订版都会自动转换为适当的Git提交,反之亦然,SubGit会将每个推送的Git提交转换为相应的SVN修订版。

在SubGit documentation上查看更多信息。