在等待下一个带来重要更新的git大版本同时,让我们先来看看最新的修正版1.8.5的特性说明。

下面是我作为普通git用户从我感兴趣的发布说明文档中发掘到的信息。

噢,如果你还没看过我之前的发布笔记,那就去看看吧,1.8.21.8.31.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已经可以过滤几种不同的变化:

–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。

[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命令行参数一样。


原文链接: atlassian , 转载自: 伯乐在线 - Codefor

备注:经 Segmentfault 编辑升级 Git 后试验测试,文章中,使用 git 带上参数时,大多格式如 "–interactive rebase"的应该"--interactive rebase",这里的"-"应为"--", 可能是作者的 blog 系统自作聪明地把 "--"替换成"-"所至。


JeOam
8.7k 声望166 粉丝

热爱互联网