git-svn的钩子

时间:2010-01-06 16:28:20

标签: git version-control git-svn hook

我是否可以设置钩子以“拉”/“推”到git-svn托管存储库?

情况是我在 Google Code 上有一个项目主持人,并使用git来管理本地工作副本。我想设置一些 hooks ,以便在使用git svn fetchgit svn dcommit从/向SVN存储库检入/输出数据时,我可以对提交进行一些修改。由于我没有托管SVN存储库,因此我无法在服务器端设置挂钩。

我可以使用任何钩子吗?或者有没有办法“标记”普通分支,以便该分支上的git pullgit push将从/向SVN存储库签入/签出,因此可以使用普通的git钩子?

提前致谢。

3 个答案:

答案 0 :(得分:9)

正如this thread所示,您可以在Subversion端拥有可以根据某些条件拒绝您的git svn dcommit的挂钩。

但是如果你需要在Git端使用git hook,我建议设置一个中间bare Git repository(裸易于推/拉)。
在那个裸露的回购中,你可以拥有你需要的任何钩子,如“how do I deploy multiple branches to different directories via git push?”所示(不是关于svn而是仅仅是为了详细说明额外回购的类似设置)

  • 如果中间回购验证您的推送,它可能会触发git svn dcommit
  • 它还可以在git fetch请求后触发git svn fetch并对其进行验证,然后再允许您自己git fetch继续前进。

(2年后)

David Southerhis blog(2012年4月)

中提出了解决方案
  

我的解决方案是拥有一个带有分头的存储库。大多数情况下,中间存储库将具有空的工作目录。当推送发生时,它将检出master,验证构建,并推送到svn,然后返回空分支。

     

我们将设置一个带有两个分支的中间git仓库。

     
      
  • master仍会指向SVN repo,
  •   
  • 并且新分支stage将让我们保持工作目录的清洁并与下游更改保持同步。
  •   

查看his gist

答案 1 :(得分:3)

https://github.com/hkjels/.dotfiles/blob/master/zsh/git-svn.zsh

如果你使用zsh,我相信这是git-svn的好搭档。只需将钩子放在.git / hooks中,并在命令前加上svn - 。

例如“.git / hooks / post-svn-rebase”

该脚本还允许使用别名

答案 2 :(得分:0)

工作中有一个git-remote-cvs remote helper;大概有人会为svn做同样的事情。应在调用这些帮助程序之前和之后调用用于远程操作的普通挂钩。