Git v2.9.0 釋出

台灣時間  6 / 14 號早上8點左右釋出的新版本,官方 Windows 的 binary release 在中午為止看起來都還停留在 v2.8.4,Mac 甚至還停留在 v2.8.1,而 FreeBSD 的 ports 目前也還沒看到更新,但如果是 Ubuntu 或是基於 Ubuntu 的 GNU/Linux 發行版,只要透過官方的 PPA 就可以直接升上去了。(可以參考 Ubuntu 上的 PPA 整理)

除了每次版本更新都必備的修 bug 以外,這次沒看到明顯跟效能提升有關的更新,背後實作的部份太瑣碎就先不琢磨,列舉依些對使用上有直接影響的更新:

  • Shell 的 auto-completion 更新
    (就是你打命令要按 tab 把剩下字補完的功能)
    • 目前看起來還是缺不少指令,不過有更新總比沒有好 …
  • git rebase -x 現在不需要加 -i 參數就可以直接使用了
    • (rebase 的時候針對每個 commit 跑測試的功能)
    • 省下了一些瑣碎的步驟/時間,畢竟不是每個人都需要 interactive 的互動操作
    • 之前的版本不加 -i 就會不讓你跑,然後出現錯誤訊息:
      • The --exec option must be used with the --interactive option
  • 可以自行指定 hooks 的位置
    (將一些事件和行為進行連結達到自動化的功能)
    • 先前都是放在 .git/hooks,可以指定之後應該某些專案就可以共用 hooks 了,或許可能就會有人性質相同專案會用到的 hooks 也可以打包成專案釋出?複雜一點的話就是偵測專案性質用比較 general 的方式跑簡單的檢查,syntax check / lint 之類的
      core.hooksPath
  • git commit 現在會吃 verbose 的設定,就不用在命令後面加參數了
    (顯示更詳細的資訊輸出)
    git config commit.verbose true
  • git clone 現在可以直接 shallow clone submodule 了
    (clone 的時候不要 clone 整個改版歷史,可以有效減少空間跟頻寬消耗跟提升速度)
    git clone --shallow-submodules
  • git diff / log 預設啟用自動偵測檔名變更
    (區別 “檔名變更” 和 “刪除一個舊檔案再寫一個新檔案” 的不同)
    • 可以透過設定來停用
      git config diff.renames false
  • 預設禁止沒有共同祖先的分支合併
    • 可以避免一些錯誤的操作
  • git log 的 commit message 縮排預設用 4 個 spaces 來展開 tab
    • 不知道是不是我沒讀懂或哪邊有問題,目前看起來還是8個空白的長度
    • 可以透過參數來取消這功能
      git log --no-expand-tabs
閱讀全文