在等待下一個帶來重要更新的git大版本同時,讓我們先來看看最新的修正版1.8.5的特性說明。
下面是我作為普通git使用者從我感興趣的釋出說明文件中發掘到的資訊。
噢,如果你還沒看過我之前的釋出筆記,那就去看看吧,1.8.2、1.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。
1 2 3 4 |
[http] sslVerify = true [http "https://weak.example.com/"] sslVerify = false |
在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命令列引數一樣。