2015-07-06 39 views
0

我想在Git中設置自定義過濾器,以便js文件自動被美化。我試着創建一個預先提交的鉤子,運行jshint和js-beautify。這是我創建的腳本:使用git創建自定義過濾器來美化js

#!/bin/sh 

files=$(git diff --cached --name-only --diff-filter=ACM | grep ".js$") 
if [ "$files" = "" ]; then 
    exit 0 
fi 

pass=true 

echo "Javascript validation with JSHint:" 

for file in ${files}; do 

    result=$(jshint ${file} | egrep "error") 

    if [ "$result" != "" ]; then 
     echo "JSHint error: ${file}" 
     echo "$(jshint ${file})" 
     pass=false 
    else 
     echo "JSHint ok: ${file}" 
     beautify=$(js-beautify ${file} -r -P --config .beautifyrc) 
    fi 
done 

echo "Validation complete" 

if ! $pass; then 
    echo "Aborting commit." 
    exit 1 
else 
    echo "Commit ok." 
    exit 0 
fi 

這樣做的方式,文件上犯下,但JS-美化所做的更改不包括在提交和文件的更改正在等待(所以我需要作出第二次提交)。我一直在閱讀有關設置過濾器的信息,但我不知道如何運行自定義的shell腳本。我很喜歡設置這個過濾器:

*.js js-beautify ${file} -r -P --config .beautifyrc 

非常感謝,最好的問候。

回答

1

您需要針對您更改的文件運行git add以記錄它們。您修改的文件僅在工作副本中更改;它們在索引上沒有改變,這是Git在創建提交時使用的。

請注意,這種方法失敗,部分git增加(您正在提交文件的一部分提交而不是整個文件)。

+0

要添加頂部,請使用像Grunt或Gulp這樣的任務運行器,並在提交之前手動運行您的美化程序。我也建議調查ESLint。 – zamber

+0

感謝AlBlue,它似乎是一種有效的解決方案。 –

+0

zamber,這個解決方案是自動的,一旦配置完成,我的團隊中沒有人需要運行美化。我會這樣做,但我希望解決方案更簡單。 –