2011-03-08 91 views
14

你如何管理跨各種平臺(比如* nix和windows)的git pre/post提交鉤子?跨平臺git鉤子

針對此方案推薦的任何最佳做法?

回答

10

git掛鉤與任何shell腳本沒有什麼不同,因爲保持它們「跨平臺」的最佳實踐同樣適用。最小的區別在於,您也可能將Windows * nix仿真層作爲這些鉤子的主要用戶,並且與大多數實際的Unix環境相比,這些鉤子可能會相對受損。

我剛剛移植了一個post-commit鉤子(並且寫了一個預先提交的鉤子)到默認的Git for Windows,它使用了MINGW32。有幾個變化,我不得不做,因爲以前的版本在關於腳本環境中可用的一些假設:

  • 沒有readlink可用,但它在Windows上是無效的,無論如何,所以我就砍死在which readlink檢查和無製作的通訊資料,如果有沒有
  • 重定向到/dev/null不工作在Windows,而不是你要重定向到nul,要做到這一點,我只是做了uname -s檢查並設定一個變量是什麼重定向到
  • 沒有mktemp可用,但由於它是我們最終修剪的目錄,所以我們使用一個天真的硬編碼的目錄名
  • 出於某種原因,通過exec >>$out標準輸出重定向工作在MINGW32罰款,但exec 2>>$err對於STDERR沒有(似乎無聲無息地死去),所以很遺憾,我們只是要回避那些重定向

除此之外,它工作得非常好,因爲它沒有太多特定於平臺的「東西」。所以只要堅持製作跨平臺腳本的最佳實踐,那至少可以讓您獲得80%的方式。之後,在所有針對您的各種環境中進行測試測試。

+4

當然,並不要求git鉤子是一個shell腳本 - 事實上,Perl中至少有一個git的contrib目錄。 – Cascabel 2011-03-08 18:48:49

+0

@Jefromi好點,雖然[shell]標籤讓我相信他在shell腳本中這樣做,但也許他不知道他必須這麼做+1 – 2011-03-08 19:13:45