2009-08-12 107 views
12

我听说可以在开发人员计算机上拥有本地Git存储库,同时将源代码的主副本保存在svn存储库中。将本地Git存储库与主Subversion版本库一起使用

一个很好的用例是你有一个每个开发者都使用的中央svn仓库。一名开发人员偶尔会下线,并希望跟踪他/她离线时所做的更改。当开发人员重新上线并可以访问svn时,他们的工作副本修改可以检查到svn。在没有使用Git本地发生的更改历史记录时,我很好,当将这些文件签入svn时。

有人可以概述如何最好地把它关掉吗?有没有这样的工作陷阱?

回答

4

你可以用this tutorial这样的东西作为起点。我也读了this tutorial

这种工作模式有几个缺陷。最重要的是,你不能使用svn版本1.5合并信息,并期望这通过git生存。这是一个主要的缺点,如果你使用(可以说相当体面的)svn 1.5合并功能。

git-svn的手册页还包含一些您应该了解的“注意事项”部分。一旦我理解了所有的注意事项,我就明白使用这种设置的好处比我的具体情况下的实际成本要低。所以我用我的精力去说服项目转,而不是与git,这是我刚succeded在

1

我认为git-svn更好的用例是,如果你被迫使用中央svn仓库,但你想亲自使用git。或者也许团队中的大多数人现在更喜欢与svn合作。使用git-svn你不会失去在本地git仓库中提交的历史。

如果您从头开始设置新的存储库和/或可以自由选择,我会选择其中一个。 git-svn可以很好地工作,但你会一直在与两个系统之间的'阻抗不匹配'作斗争。

如果它只是一个集中式模型,您正在寻求实现,那么公共git存储库可以用作中央存储库。请参阅setting up a shared repository上的Git用户手册部分。

2

一个解决方案,我会尝试是:使用SVN

  • git的初始化从中央回购

    1. 结帐创建本地回购
    2. 添加的.svn到的.gitignore
    3. git的添加*到所有文件添加到本地回购
    4. 把你所有的中间分支/提交/恢复的饭桶。
    5. 完成后,使用SVN提交回中央回购站。
  • 4

    说你的SVN回购是在SVN + SSH://用户名@ svn_server/SVN/your_repo
    和你的SVN仓库有一个 “正确” 的布局(树干,树枝,标签) 这里的工作流程我已经使用了几个月了:
    1。'MKDIR your_repo'
    2. 'CD your_repo'
    3.'的git svn的克隆-s SVN + SSH://用户名@ svn_server/SVN/your_repo。'(介意点)
    4等待这取决于你的资料库:)的大小而]
    现在您的GIT‘主人’跟踪SVN主干
    你也可以做一个跟踪分支像你的通常做使用Git如果你在一些分支工作
    5.传统砍砍砍
    6.更新你的克隆“混帐SVN取& &混帐SVN变基
    7.“推”您对svn的更改与'git svn dcommit '

    更多的好东西
    定义按照你的.gitconfig方便别名:
    1.别名' spull '它代表SVN-拉这样的:'!spull =混帐SVN取& &混帐SVN变基 '
    2.别名' spush '它代表SVN推这样的:'!spush =混帐SVN dcommit'
    这些别名转工作流程,以纯效益: 克隆/砍砍/spull/spush - >利润

    的svn:externals的
    我找不到这是在互联网上的一个很好的解决方案,所以我自己做了一个:)
    http://github.com/sushdm/git_svn_externals它还不完美,但它应该明确地让生活变得更容易。

    对我很好,希望它对你有帮助。

    相关问题