Git – “全局”的git hooks没有生效吗?> 模板文件在git init / git clone时会被复制的机制

我之前模糊地以为和 git config 或 gitignore 一样,git hooks 等也有全局设置,但实际上并不一样。

听起来就像是将模板文件复制到当前仓库的机制。

陷阱

    • ファイルコピーは git clone と git init 時におこなわれる

最初に git 管理を始める時以外に git init を使うという発想がなかった

なおかつ git init では既に存在するファイルの上書きはおこなわれない (コピーが必要なものは、いったんファイルを削除する必要がある)

例: rm .git/hooks/pre-push git init

git hooks はカレントレポジトリのものが使われる。(テンプレートファイルは直接使われない)
今思えば gitconfig に template とか init とかいう名前が付いている時点で気付いても良かった気もする

gitconfig 的示例

在~/.gitconfig文件中指定了”模板目录”。

[init]
  templatedir = ~/.git_templates

Git hooks 的模板例子

在指定的目录下创建作为模板要复制的文件,可以在~/.gitconfig中设置。

在这里,让我们试着创建一个无论如何都无法推送的 Git 钩子。

mkdir -p ~/.git_templates/hooks/

echo "echo Nobody can git push! && exit 1" > ~/.git_templates/hooks/pre-push

chmod +x ~/.git_templates/hooks/pre-push

顺便提一下,要通过 hooks/pre-push 停止推送的话,需要使用非零的 exit 值来结束。

克隆git库的示例

当执行git clone命令时,可以看到 .git/hooks/pre-push文件从模板文件被复制到存储库中。

git clone https://github.com/your/some_repository
cd some_repository

让我们查看当前目录下的.git文件夹的内容。

cat .git/hooks/pre-push
echo Nobody can git push! && exit 1

可以看出它是从模板文件复制过来的。

如果要更新现有仓库的 git hooks,

如果本地仓库已经存在 .git/hooks/pre-push 文件,可以先删除然后重新初始化。

rm .git/hooks/pre-push
git init
Reinitialized existing Git repository in /path/to/local/repository/.git/

自动覆盖似乎没有进行。

请阅读以上内容

文档

git-init – 创建一个空的Git仓库或重新初始化一个现有的仓库

模板目录
模板目录中不以点开头的文件和目录在创建后将被复制到$GIT_DIR中。

Git – git-init 讀者文檔

嘿塔 (Hē tǎ)

    • gitでmasterへのpushを防ぐhook – Qiita

 

    • gitでmasterへのpushを禁止する – Qiita

 

    git で remote master ブランチへのプッシュを禁止する – Qiita

版本

    git version 2.17.1

链接

    Gist

招募聊天成员

如果您有任何问题、困扰或需要咨询的事情,请随时使用LINE开放聊天服务。

 

推特

 

广告
将在 10 秒后关闭
bannerAds