git svn网守仓库

tbo*_*007 15 svn git git-svn

我现在已经使用git很长一段时间了,主要是git-svn.现在我想说服我的同事从svn切换到git.但不幸的是,前提条件是svn存储库保持相当长的一段时间.所以我搜索了一个解决方案并提出了这本书:

Jon Loeliger的"使用Git进行版本控制".我买了它,它真的很好,但我不完全理解设置git svn看门人回购的指南.

在第16章中,他描述了一种情况,其中有一个Subversion存储库,至少有几个用户想要使用Git.他提出了一个单独的"看门人"git存储库,它是subversion的唯一接口.在git svn克隆了subversion repo(使用--prefix = svn /)后,所有分支都被推送到裸存储库(git push ../svn-bare.git'refs/remotes/svn/:refs/heads/svn / '和其他git用户被告知要克隆这个repo,它现在包含所有svn遥控器的本地分支.

这部分有效,我想我完全理解它.但我没有得到下一部分:

如果一个克隆裸存储库的开发人员将更改从他的repo推回到裸存储库,然后我在svn的裸存储库中提交这个,那么用户推送的提交由于git-svn创建的被替换的提交而有充分理由丢失.还是我错了?这是如何运作的?

这本书说

然后,要合并回subversion,在网守回购中,你做

git checkout svn/trunk(或其他分支 - 这是检查一个分离的头,因为svn/trunk是一个远程)git merge --no-ff new-feature git svn dcommit

如何在裸存储库中签出分支?我觉得这不行

这导致在分离的头上进行合并提交,然后将修改后的提交(在添加git-svn-id行之后)放在真正的svn/trunk分支上.

什么是真正的svn/trunk?

分离头上的提交"比冗余更糟糕.将其用于其他任何事情最终都会导致冲突.所以,只要忘记提交.如果你没有把它放在分支上,那就更容易了忘了"(Jon Loeliger).

我有点困惑.有人为创建一个git svn网守回购有更好的解释吗?我搜索过网站和这个网站,但我找不到任何适合我的网站.

在与同事合作时,我已经厌倦了浪费这么多时间与svn分支和融合.

Von*_*onC 6

如何在裸存储库中签出分支?我觉得这不行

是的,它的作用:您只需克隆裸回购本地,在这个过程中,在那里你可以检出/创建(再次使非裸露回购本地,只要你想)尽可能多的分支.

需要一个简单的回购作为上游回购的地方.(参见" git push仅适用于裸存储库? ")

但是为了推动任何事情,即其他开发人员将他们在非svn分支中的更改推回到网守仓库,说其他开发人员必须首先克隆该裸仓库,对本地副本进行所有相关修改,并推回到裸仓库.
另外,你可以在那个裸仓库上设置一些钩子来验证你的推送:参见" 钩子git-svn ".

然后dcommit,看门人还克隆了该网守回购,他/她将从中回复:

  • checkout与svn相关的远程分支(' svn'是远程仓库的名称),例如' svn/trunk'
  • 合并该未命名分支中的相关更改
  • git-svn dcommit

所以回顾一下:

  • 开发人员克隆那个看门人回购在他们自己的分支中记录他们的变化(他们可以推回,因为看门人回购是裸的)
  • 推回到实际SVN仓库的负责人也克隆了该守门员仓库,以便选择需要合并到与SVN特别相关的Git分支的东西(参见例如" 克服git svn告诫 ").


Tho*_*sen 2

我认为您不应该将更改推回裸仓库。我这里有一个示例设置,您可以尝试一下:

http://blog.tfnico.com/2010/10/gitsvn-5-centralized-git-svn-mirror.html

在我的设置中(我已经使用了 3-4 个月,没有任何问题),更改应该始终“流”过 SVN 存储库。不太懂这个守门员的技术。。