2010-02-23 109 views
3

我想寫一個自動執行代碼清理的git鉤子,比如刪除尾隨空白。編寫腳本拒絕某些提交很容易,但我寧願在可能的情況下透明地解決問題。雖然我意識到git有一些像這樣的東西(自動轉換換行符等)的內置支持,但我希望更靈活的東西。預提交鉤子可以執行此操作嗎?你能直接修改索引(還是有更好的方法)?編寫一個git鉤子來在本地提交時自動修改代碼

我也意識到最終我需要一個服務器鉤子來拒絕那些不使用本地鉤子的開發人員的壞提交,但我想幫助那些選擇使用它的人。 (如果可以修改服務器上更好的代碼,但我不相信你可以。)

+0

你不能用一個提交鉤子做到這一點,但你可以用一個過濾器驅動程序來做到這一點。 – 2010-02-23 04:12:43

+0

你可以做一個預先提交的鉤子。我使用它來在特定文件上放置時間戳。其實很簡單。 – tjameson 2011-09-13 21:57:53

回答

0

下面是使用過濾器驅動程序刪除尾隨空白的示例。請注意,在您提交之後,空白將保留在工作副本中,直到您完成結帳。另請注意,下面的sed命令括號中的空格是一個製表符和一個空格。

 
$ rm -rf .git 
$ git init 
Initialized empty Git repository in /private/tmp/foo/.git/ 
$ echo 'trailing white ' > file 
$ echo 'file filter=white' > .git/info/attributes 
$ cat << EOF >> .git/config 
> [filter "white"] 
>   clean = sed 's/[  ]*$//' 
> EOF 
$ git add file 
$ git ci -m"Sample commit" 
[master (root-commit) 654fa8d] Sample commit 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 file 
$ git checkout -f master file 
$ cat -tve file 
trailing white$