2011-11-20 87 views
3

我有这样的场景,其中GIT:如何访问到存储库文件与GIT后收到钩

我想,当它在推动更改为“做什么”与特定文件。 例如,一个.sql文件必须在数据库中转储。

我使用GIT“后接受”钩与这样的语句:

DUMP=$(git diff-tree --name-only -r -z master dump.sql); 

if [ -n "$DUMP" ]; then 
    // using the new dump.sql 
fi 

如何访问从钩刚刚推新dump.sql?

回答

7

您可以从版本$转用检索文件dump.sql:

git cat-file blob $rev:dump.sql 

的,收到后钩也被称为比主推其他的事情......希望你有一个检查的地方,你”重新处理更新后的主参考。就风格而言,我会使用传递给钩子的新版本值,而不是直接从钩子中引用主数据。

通常我写了后收到钩是这样的:

while read oldrev newrev refname; do 
    if [ "$refname" = "refs/heads/master" ]; then 
     # definitely updating master; $oldrev and $newrev encompass the changes 
     if git diff-tree --name-only -r -z $oldrev $newrev dump.sql; then 
      # dump.sql changed... 
     fi 
    fi 
done 

重要的是,这也与单推科佩斯发送过多次提交一气呵成掌握---命令你在问题中表现出只看着主人的最后一次提交。

+0

非常感谢!有没有办法确定引用的“分支”更新是主而不是其他分支? – Randomize

+1

@Randomize post-receive钩子在stdin上传递了一些信息......我将通过编辑答案来说明它的可读性更强 – araqnid

+0

WOW!再次感谢!最后一个问题:谷歌搜索我找到关于编写钩子太通用的文档。你知道有什么好的网站或书能够正确解释如何编写钩子,定义环境变量等吗? – Randomize

相关问题