我想使用git pre-auto-gc hook,但它似乎沒有被調用。git pre-auto-gc hook根本不會被調用
該文件是可執行文件,我使用git 1.7.1和1.5.6.5對它進行了測試,它們都沒有像預期的那樣工作(當運行git gc --auto
時,它們沒有調用腳本)。
有沒有人對此有所瞭解?也許我需要在配置中設置一些東西讓git知道這個鉤子?
我試着google了一下,但我沒有發現任何東西......
感謝:-)。
我想使用git pre-auto-gc hook,但它似乎沒有被調用。git pre-auto-gc hook根本不會被調用
該文件是可執行文件,我使用git 1.7.1和1.5.6.5對它進行了測試,它們都沒有像預期的那樣工作(當運行git gc --auto
時,它們沒有調用腳本)。
有沒有人對此有所瞭解?也許我需要在配置中設置一些東西讓git知道這個鉤子?
我試着google了一下,但我沒有發現任何東西......
感謝:-)。
好的,我可能會有答案。
在gc.c Git的來源,我看到鉤在need_to_gc
功能,有兩種方法可以擠跑......
static int need_to_gc(void)
{
/*
* Setting gc.auto to 0 or negative can disable the
* automatic gc.
*/
if (gc_auto_threshold <= 0)
return 0;
/*
* If there are too many loose objects, but not too many
* packs, we run "repack -d -l". If there are too many packs,
* we run "repack -A -d -l". Otherwise we tell the caller
* there is no need.
*/
if (too_many_packs())
append_option(argv_repack,
prune_expire && !strcmp(prune_expire, "now") ?
"-a" : "-A",
MAX_ADD);
else if (!too_many_loose_objects())
return 0;
if (run_hook(NULL, "pre-auto-gc", NULL))
return 0;
return 1;
}
IMO第一短路(如果gc.auto
設置到0)沒問題。但第二個不應該阻止鉤子運行,也許它應該傳遞一個布爾參數來說明是否需要gc。因爲現在它是一種令人沮喪的事情,當你想要的時候鉤子不運行。
而順便說一句我發現了git源代碼,它真的很高興閱讀代碼非常乾淨!
編輯:我再次測試鉤在一些舊的和相當大的回購,並且gc從未被稱爲--auto
選項時提供。默認的auto_threshold
值(顯然是27)可能有點太高,或者gc只在極端情況下才需要。
無論如何,它讓我很煩,這個鉤子沒有被調用,這麼多。
我很好奇,如果已經確定gc不會運行,爲什麼要運行該鉤子?該鉤子旨在讓您有機會拒絕自動gc,如果它是由於運行;如果gc不會在任何情況下運行,似乎沒有任何意義。 – 2010-08-08 10:17:45
@Charles:我想讓這個鉤子運行,因爲我用它來做別的事情。我正在編寫一個基於git的博客引擎,使用鉤子來生成靜態html。我希望能夠用鉤子來重建每個html文件(例如在模板更改的情況下),而我所看到的唯一「乾淨」方式就是使用這個pre-auto-gc鉤子。 – p4bl0 2010-08-08 12:01:53
如果您使用鉤子來生成基於存儲庫更改的內容,是不是pre-auto-gc完全不合適?不會後提交或更新後更適合? – 2010-08-08 13:12:35