我们想制作一些我们可以共享的基本钩子脚本 - 例如预格式化提交消息.Git有通常存储在其下的钩子脚本<project>/.git/hooks/.但是,当人们进行克隆并且它们不受版本控制时,这些脚本不会传播.
有没有一种好方法可以帮助每个人获得正确的钩子脚本?我可以让这些钩子脚本指向我的仓库中的版本控制脚本吗?
我有一个Git存储库,里面有几个子模块.如何git submodule init在运行后列出所有子模块的名称?
该git submodule foreach命令可以回显子模块的名称,但只有在检出后才能使用,这在init步骤之后没有发生.链中有更多的步骤需要在签出之前发生,我不希望将子模块的名称硬连接到脚本中.
那么是否有一个Git命令来获取所有当前已注册但尚未检出的子模块的名称?
它被认为是一种不好的做法 - 将.git/hooks放入项目存储库(例如,使用符号链接).如果是的话,为不同的git用户提供相同的钩子的最佳方法是什么?
根据手册,post-checkout钩子在a git checkout(正如预期)之后运行,但也在a之后运行git clone(除非你通过--no-checkout).
很好,现在,考虑以下因素:
git clone--template被复制为不可执行,因此之后不执行git clone一个post-checkout钩子似乎不可能在一个之后被执行git clone.尽管如此,http: //git-scm.com/docs/githooks上的githooks手册页明确说明了一种避免执行的方法,并且在执行时也传递了参数,这表明可以执行自定义钩子经过.git-clone
那么,怎么可能呢?我显然在这里遗漏了一些东西.
结果
我正在尝试update为git 编写一个钩子,如果子模块被更新为子模块的上游存储库中不存在的提交ID,则会跳转.换句话说,我想强制用户在将更改推送到子模块指针之前将更改推送到子模块存储库.
一个警告:
我一直在玩一个想法,但感觉必须有一个更好的方法来做到这一点.这是我计划在更新钩子中做的事情:
refs/heads/.如果没有,请尽早退出.git rev-list得到被推版本列表.git show <revision_id>并使用一个正则表达式,查看子模块是否已更新(通过搜索`+子项目提交[0-9a-f] +)..gitmodules特定commit(git show <revision_id>:.gitmodules)所看到的文件内容.cd到3.4中找到的路径并执行git rev-parse --quiet --verify <updated_submodule_commit_id>以查看该存储库中是否存在该提交.如果没有,则以非零状态退出.(注意:我相信3.2的结果可能会在修订版本中缓存,只要输出git rev-parse --quiet --verify <revision_id>:.gitmodules不会从一个修订版更改为下一个修订版.我将此部分留下来以简化解决方案.)
所以是的,这看起来相当复杂,我不禁想知道是否有一些内部git命令可能会让我的生活变得更轻松.或者也许有不同的方式来思考这个问题?