Git 1.8.5 新特性

Codefor發表於2013-12-05

在等待下一個帶來重要更新的git大版本同時,讓我們先來看看最新的修正版1.8.5的特性說明。

下面是我作為普通git使用者從我感興趣的釋出說明文件中發掘到的資訊。

噢,如果你還沒看過我之前的釋出筆記,那就去看看吧,1.8.21.8.3 和1.8.4

慣例升級建議

按慣例,我會提供一些升級的建議,包括警告和提醒(大部分時候,這些建議官方會發布的比較慢,我們也控制不了)。下面是一份升級指導:

  • 如果你在OSX上使用homebrew,執行brew update && brew upgrade git。
  • 如果是基於Ubuntu的發行版,使用智慧的apt trick(其餘的發行版留待讀者聯絡J)。
  • 在windows上,僅僅執行新的 installer就可以了(Windows釋出通常會拖慢一些,所以如果你現在沒發現,請耐心等待。)。

HEAD 的新別名終於可以使用

這個特性開發了一段時間,最終可以了:HEAD有了一個新的別名,@。如git log @.

一些rebase改進

Rebase有如下改進:

  • 在–interactive rebase的操作中,提交的id會遵照core.abbrev的長度(core.abbrev是儲存提交的雜湊的縮寫長度的配置項,預設為7)。
  • 你現在可以通過修改配置pull.rebase到preserve,來定製git pull –rebase是否使用預設情況下變平還是保留合併。對這一點的細節和rebase –preserve-merges的作用,請參考Stack Overflow的答案。

status小改進

這次釋出中包含了不少git status的改進:

  • 不再列印$name.ignore設定為all的子模組的變化資訊。
  • 在cherry-pick中顯示當前被選中的提交。
  • 輸出中不再包含以#開頭的行。如果你用指令碼解析git status的輸出,現在需要更新為git status –porcelain。
  • git status 和 git branch -v -v  現在區別不依賴任何其他分支的分支,和依賴的分支同步的分支,以及依賴一些已經不存在分支的分支。

Diff 支援所有非指定型別(all-but)

git diff –diff-filter已經可以過濾幾種不同的變化:

1
2
3
4
5
6
–diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
只選擇哪些新增 (A), 賦值 (C), 刪除 (D), 修改 (M), 重新命名 (R)的檔案, 它們的型別(如 普通檔案, 符號連結, 子模組, …) 是否改變 (T), 是否未合併 (U), 是未知 (X), 或它們的對崩潰(B). 任何過濾字元的組合(包括none)均可使用。當組合中包括All或none,如果任一檔案匹配了其他選項,就選擇了所有路徑。如果沒有檔案匹配其他選項,什麼都不做。

Diff現在支援接受小寫字母引數,含義為展示所有非指定型別的變化。

HTTP變數區分站點

  • http.*變數現在可以指定URL。如下例子會在和指定的站點互動時關閉http.sslVerify。

在move時引入子模組感知

在每個釋出版本中,子模組的支援一直在持續改進。這次git支援了子模組的重新定位。

‘git mv A B’在移動子模組A時,git支援重新定位其工作數,調整其路徑以匹配.gitmodules檔案。

效能,內部實現等

  • HTTP傳輸層在可能的情況下嘗試使用TCP keepalive。
  • git repack現在採用c編寫。

其他資訊

下面是直接從釋出說明中摘出來的點:

  • git whatchanged不建議使用,但沒有去除。其在文件大部分篇幅中重要性降低。
  • git cherry-pick 現在支援git cherry-pick – 以從前一個分支獲取。
  • xdg-open可以用作 git web-browse的瀏覽器後端,進而豐富了git help –w的輸出。
  • 和make –C一樣,git –C…使Git在執行任何操作之前先切換到那個路徑。
  • 使foo^{tag}去除自身的一個tag,也就是空操作,並在foo不是一個tag時失敗。git rev-parse –verify v1.0^{tag}會簡化如下操作test $(git cat-file -t v1.0) = tag。
  • git push –no-thin 實際上禁止了“thin pack transfer”優化。
  • 智慧路徑規範可以在更多的地方使用。如“:(icase)makefile”匹配Makefile和makefile;“:(glob)foo/**/bar”匹配bar,foo以及任意foo的子資料夾。
  • Git blame現在可以接受不止一個-L選項來獲取原版本中多行資訊。
  • http客戶端可以使用http.savecookies配置變數請求儲存cookies。
  • Git fetch(git pull一樣)會檢查fetch.prune和remote.*.prune配置變數。其行為和加上-prune命令列引數一樣。

相關文章