我是否可以设置钩子以“拉”/“推”到git-svn
托管存储库?
情况是我在 Google Code 上有一个项目主持人,并使用git来管理本地工作副本。我想设置一些 hooks ,以便在使用git svn fetch
和git svn dcommit
从/向SVN存储库检入/输出数据时,我可以对提交进行一些修改。由于我没有托管SVN存储库,因此我无法在服务器端设置挂钩。
我可以使用任何钩子吗?或者有没有办法“标记”普通分支,以便该分支上的git pull
和git push
将从/向SVN存储库签入/签出,因此可以使用普通的git钩子?
提前致谢。
答案 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 Souther在his 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做同样的事情。应在调用这些帮助程序之前和之后调用用于远程操作的普通挂钩。