我可以在commit-msg钩子中切换到另一个分支,提交它并切换回来吗?

时间:2013-01-11 02:59:29

标签: git github githooks

我希望在我提交gh-pages的任何时候,自动将提交哈希的前几个字符和提交消息插入master分支的文件中。

目前使用此post-commit挂钩:

#!/bin/bash
#Ensures we are in master branch
[ `git rev-parse --abbrev-ref HEAD` != "master" ] && exit 1
git checkout gh-pages
git merge master
# update the js file with commit identification information from git
# I can't seem to get this to work without generating a *_bak file. Whatever.
# I have a section in my source that has delimiters #% %# that I use to stuff the
# git commit into, so I can view the version of source I am testing on my device
# very easily (you can't imagine how much more definite and efficient this is compared
# to what we do at my work)
sed -i _bak "s/#%.*%#/#% `git log master -1 --format="%h %s"` %#/" source.js
git commit -a -m"this commit made by a script"
git checkout master

我怀疑将它转换为commit-msg钩子会让我减少生成的额外提交量(两个,一个将master合并到gh页面,一个写入我使用的commit-msg)对于主提交到文件中)每当我在master上执行提交时,它至少允许我通过为commit -n执行--no-verify来轻松跳过它,而使用post-commit {1}} hook我必须取消挂钩文件上的exec标志才能暂时禁用它。

这有用吗?我想我应该尝试一下。但Git会怎么做?只要我的bash脚本发出返回值0,它就会继续执行提交?

2 个答案:

答案 0 :(得分:0)

如果这不起作用,你的钩子的解决方案是在另一个本地仓库(已经签出到gh-pages)中使用--git-dir和{{1}执行相同的命令你的git命令的选项(为了引用其他repo)。

然后在你的仓库中取回那个分支(仍然在同一个钩子里)。


2016年8月更新: Simpler GitHub Pages publishing 现在允许将您的网页文件保存在相同分支的子文件夹中(不再需要--work-tree) :

Now you can select a source in your repository settings and GitHub Pages will look for your content there.

因此,您现在可以直接更新同一分支中的子文件夹内容。

答案 1 :(得分:0)

承诺不是大问题。您不能真正使用git commit本身,但您可以使用管道命令创建提交(允许您使用单独的索引文件将提交添加到另一个分支而不实际触及工作树)。更大的问题是合并,因为它可能会失败并使树处于需要手动干预的状态。