團(tuán)隊(duì)合作項(xiàng)目,使用git時(shí)會(huì)發(fā)生這種情況 : 每個(gè)人的代碼格式不同,對(duì)比工具再做對(duì)比的時(shí)候常常會(huì)當(dāng)作沖突來(lái)處理垒酬,雖然有些工具會(huì)有明顯的提示,但還是會(huì)占用自己太多時(shí)間件炉。同時(shí)勘究,一個(gè)團(tuán)隊(duì)保持一致的代碼風(fēng)格和規(guī)范,甚至是工具斟冕,都是有必要的口糕。
經(jīng)過(guò)一頓 google 之后, 發(fā)現(xiàn)git 的 hook pre-commit這個(gè)腳本可以指定磕蛇,再commit之前插入一些腳本執(zhí)行景描,要是再這個(gè)腳本中加上對(duì)代碼的格式化,就解決了這個(gè)問(wèn)題秀撇。
1超棺、代碼的格式化工具我選擇了google提供的代碼格式化工具。
項(xiàng)目地址在這里 https://github.com/google/google-java-format
通過(guò)文檔給的方式呵燕,在android studio下載一個(gè)插件
再設(shè)置中配置棠绘,這里的style我選的是 aosp 的style,因?yàn)槭莂ndroid 項(xiàng)目,并沒(méi)有直接使用默認(rèn)的氧苍。配置好之后夜矗,我再對(duì)代碼進(jìn)行格式化的時(shí)候,就使用了google-java-format让虐,不再是之前再ide中配置的那個(gè)了紊撕。
2、接下來(lái)寫(xiě)shell
我們?cè)陧?xiàng)目根目錄中可以找到.git 下的hooks文件夾赡突。里面存在一堆文件对扶,就像這樣。
可以創(chuàng)建一個(gè)空文件惭缰,名字為pre-commit辩稽。這里我直接貼上一段代碼
#!/bin/bash
#
array=`git diff-index --name-only HEAD`
for name in ${array}
do
extension=${name##*.}
if [[ ${extension} == "java" || ${extension} == "xml" || ${extension} == "kt" ]];then
D:\\Applications\\tiny-tool\\formatjava.cmd ${name}
if [ $? -eq 0 ]; then
echo "format ok" ${name}
else exit 1
fi
fi
done
exec git add ./
大兄弟,別的都好說(shuō)从媚, D:\\Applications\\tiny-tool\\formatjava.cmd ${name}
有點(diǎn)看不明白,那是因?yàn)檫€差一個(gè)文件沒(méi)有貼上來(lái)患整。就是formatjava.cmd這個(gè)文件
@ECHO OFF
java -jar D:\Applications\tiny-tool\google-java-format-1.3-all-deps.jar --replace %*
@ECHO ON
看這個(gè)工具還挺好用拜效,可以直接格式化java代碼,直接寫(xiě)一個(gè)cmd放到系統(tǒng)path中去各谚,平時(shí)也能使用紧憾。
這樣,再git commit 之后昌渤,會(huì)自動(dòng)將提交的java文件進(jìn)行格式化赴穗。這樣就在本地和遠(yuǎn)程都使用同一套代碼規(guī)范了。
ps:有個(gè)問(wèn)題膀息,google-java-format-1.3-all-deps.jar這個(gè)版本的會(huì)把java doc 也格式化了般眉, 蛋疼, 還好有廣大網(wǎng)友的幫助
https://github.com/Kurt-Bonatz/google-java-format/tree/skip_javadoc_formatting
這個(gè)提交已經(jīng)添加到了google的代碼中了潜支, 就等著google更新甸赃, 或者直接把代碼擼下來(lái)編譯