簡體   English   中英

git-clone和post-checkout hook

[英]git-clone and post-checkout hook

根據手冊, post-checkout hook在git checkout (正如預期)之后運行,但也在git clone (除非你傳遞--no-checkout )。

很好,現在,考慮以下因素:

  • 你沒有git clone之前的本地存儲庫
  • 鈎子不在遙控器之間同步
  • 存儲在與 --template一起使用的自定義模板目錄中的 --template被復制為不可執行的,因此在 git clone之后 不會執行 (實際上這不是Jefromi在他的回答中所說的那樣,但鈎子仍未執行)

似乎不可能在git clone之后執行post-checkout鈎子。 盡管如此, http: githooks上的githooks手冊頁明確說明了一種避免執行的方法,以及在執行時傳遞的參數,這表明可以執行自定義git-clone后掛鈎。

那么,怎么可能呢? 我顯然在這里遺漏了一些東西。

結果

我想你可以進行自定義安裝 - 重命名.../share/git-core/templates/hooks以刪除.sample后綴。

您還可以將一個充滿符號鏈接的模板目錄創建到存儲庫中的鈎子目錄(例如, post-checkout -> ../../hooks/post-checkout )。 然后,如果克隆的repo包含該特定的鈎子,它就會被執行。

不過,你說得對,在大多數情況下都不會發生。

編輯:我剛測試過它,並且--template選項似乎確實保留了權限,因此這是一種更加直接的方式來實現它。 你看到什么表明它剝離了那一點?

關於版本的最終決定權:你正在網上查看更新版本的git而不是你正在使用的文檔。 這個功能是在dfa7a6c中添加的(克隆:簽出時運行post-checkout hook); git describe說直到v1.6.2-rc2才包括這個。

githooks文檔

運行git-init時 ,會將一些示例掛鈎復制到新存儲庫的hooks目錄中,但默認情況下它們都被禁用。 要啟用掛鈎,請通過刪除其.sample后綴來重命名它。

這個初始化發生作為創建克隆,注意調用的一部分init_dbbuiltin-clone.c

例如:

$ cat /tmp/my-git-template/hooks/post-checkout 
#! /bin/bash
echo "Hello from $0"

$ git clone --template=/tmp/my-git-template file:///tmp/repo.git my-clone
Initialized empty Git repository in /tmp/my-clone/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Hello from .git/hooks/post-checkout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM