不确定这是否可以在git中使用(我没有找到它,但我可能在我的搜索中使用了错误的词汇表),但是能够修改和启用钩子作为所有新的默认值是有用的存储库(在创建时我的意思)所以这些不必在每次创建新存储库时进行自定义。看起来这样做的简单方法是编写一个包装器,在我创建一个新的存储库时设置我的钩子和chmods,但如果有一种内置到git中的方法,我宁愿使用它而不是使用不必要的包装器脚本,而不是四处闲置。
澄清从评论复制到现在删除的答案:
我的问题是,是否可以更改所有新存储库的默认行为,因此不需要每次为每个新存储库以相同的方式自定义它们。简单的答案就是编写一个用于创建和自定义repos的包装器(它生成钩子脚本并对它们进行chmod),但似乎这个默认行为也应该可以自定义而不必这样做。
答案 0 :(得分:32)
来自git-init
手册页(如果您正在克隆现有仓库而不是从头开始创建新仓库,也适用于git-clone
):
--template=<template_directory> Provide the directory from which templates will be used. The default template directory is /usr/share/git-core/templates. When specified, <template_directory> is used as the source of the template files rather than the default. The template files include some directory structure, some suggested "exclude patterns", and copies of non-executing "hook" files. The suggested patterns and hook files are all modifiable and extensible.
您可以修改系统范围的模板目录(默认为/usr/share/git-core/templates
,但可能位于计算机上的其他位置),您可以在创建时在命令行上提供--template=<template_directory>
或克隆repo,或者您可以在配置文件中配置默认模板目录:
[init]
templatedir = /path/to/templates
答案 1 :(得分:23)
使用git 2.9,你有一个新的选项来集中挂钩: core.hooksPath
commit 867ad08,见commit de0824e,commit bf7d977,commit 49fa52f,Ævar Arnfjörð Bjarmason (avar
)(2016年5月4日)。
(2016年5月17日Junio C Hamano -- gitster
-- commit 6675f50合并)
core.hooksPath
默认情况下,Git会在“
$GIT_DIR/hooks
”目录中查找您的挂钩 将此设置为不同的路径,例如'/etc/git/hooks
',Git会尝试在该目录中找到您的钩子,例如“/etc/git/hooks/pre-receive
”代替“$GIT_DIR/hooks/pre-receive
”。路径可以是绝对路径也可以是相对路径。相对路径被视为相对于运行挂钩的目录
此配置变量在您需要的情况下非常有用 集中配置您的Git挂钩,而不是在a上配置它们 每个存储库的基础,或更灵活和集中 替代您已更改的
init.templateDir
默认挂钩。
此路径的作者(ÆvarArnfjörðBjarmason avar
)添加his commit:
我计划在用户可以创建的集中式Git服务器上使用它
/gitroot
下的任意存储库,但我想管理所有存储库 应该通过统一的调度机制集中运行的挂钩。
Git 2.10使用git rev-parse --git-path hooks/<hook>
commit 9445b49见Johannes Schindelin (dscho
)(2016年8月16日)
(由Junio C Hamano -- gitster
--合并于commit d05d0e9,2016年8月19日)
中的
rev-parse
:尊重core.hooksPath
--git-path
--git-path
选项的想法不仅是为了避免这种情况
输出为--git-dir
的前缀路径,但也要尊重.git
目录中特定公共路径的覆盖
(例如git rev-parse --git-path objects
将报告该值
环境变量GIT_OBJECT_DIRECTORY
,如果设置)。
在介绍
core.hooksPath
设置时,我们忘记相应地调整git_path()
。这个补丁解决了这个问题。
答案 2 :(得分:3)
使用git 1.6.5.3(以及一些早期版本),您可以获得.git/hooks
目录中提供的示例挂钩:
$ ls .git/hooks
applypatch-msg.sample post-update.sample prepare-commit-msg.sample
commit-msg.sample pre-applypatch.sample update.sample
post-commit.sample pre-commit.sample
post-receive.sample pre-rebase.sample
$
它们都可以在我的系统上执行。
要使用其中一个挂钩,请复制或重命名文件,删除“.sample
”后缀。根据您的要求进行编辑。
解决注释中的问题 - 要更改安装的默认样本挂钩,您需要找到安装git
的目录。在我的机器上,即$HOME/git
- 因此二进制文件位于$HOME/git/bin/git
。然后包含示例挂钩的目录是:
$HOME/git/share/git-core/templates/hooks
如果您编辑这些模板(请注意),那么这将被复制到新的git存储库。它们仍然是样品,但它们将成为您的样品。
我没有尝试在目录中创建非样本文件;它可能会也可能不会被复制。但是要小心改变默认值 - 当你下次升级时,你将不得不重做这些更改。
答案 3 :(得分:0)
对于MacPorts,dorectory将为/opt/local/share/git-core/templates/
要与团队成员共享挂钩或模板,我通常会创建子目录
项目如$PROJECT_DIR/lib/git/hooks
然后创建Rake任务或shell脚本
复制cp $PROJECT_DIR/git/hooks/* $PROJECT_DIR/.git/hooks
。
符号链接不起作用。