Git 在版本 2.13 中继续改进了安全性和 UI

  • Sergio De Simone
  • 赵亚伟

2017 年 5 月 22 日

话题:GitHubGit语言 & 开发

Git 的最新版本做了很多改进,旨在改进其用户界面,同时也修复了两个重要的漏洞。

众所周知,Git 用于唯一识别对象的 SHA-1 哈希算法最近被证明容易受到碰撞攻击。虽然 Git 团队准备过渡到一个新的更安全的散列算法,但它们已经实现了一种算法,这种算法可以检测和拒绝任何创建时带有制造冲突目的的对象。这应该会有效地减轻被攻击的风险。

在安全性方面,Git 2.13 版本还修复了一个漏洞,这个漏洞会影响到所有使用 git shell 的 Git 托管服务器,它使攻击者可以在远程服务器上静默运行 shell 命令。而该版本提供了一种更严格的方式,通过 SSH 来使用 Git 的 push/pull 命令和安装在 git-shell-commands 目录中的自定义命令。

同时,Git 2.13 版本在UI 方面也做了很多改进。尤其对于为不同项目工作的所有开发人员来说,最有用的功能是通过条件配置来处理多个身份的能力。简而言之,条件配置提供了一种基于一组条件来包含 Git 配置文件的方法。例如,您可以在〜/ .gitconfig 文件中使用以下指令,以根据存储库所在目录的路径自定义 Git 配置:

[includeIf "gitdir:~/work/"]
  path = .gitconfig-work
[includeIf "gitdir:~/play/"]
  path = .gitconfig-play

具体来说,这可以用来在.gitconfig-work 和.gitconfig-play 中定义不同的用户和电子邮件。

在 Git 2.13 版本中,几乎所有开发人员都会使用到的功能是在 Git 命令中使用路径规则,即pathspecs。 例如,如果要在存储库中对给定类型的所有文件执行 grep,可以写:

git grep my_pattern '*.c'

现在,您还可以使用否定 pathspecs(从命令中排除特定的 pathspec)以及使用属性的 pathspec(在 pathspec 定义中包括这些属性)。 例如:

git grep text_to_search -- src ':(exclude)*.c'

其他显著地改进包括:

  • git branch、git tag 和 git for-each-ref 现在支持的 --no-contains 选项,可用于选择不包含指定提交的标签或分支,例如:

    git tag -l --no-contains cf5c725 'v[0-9]*' | sort | tail -n 10

    已有 --contains 选项时 --no-contains 选项会被忽略,例如查找在两个标签之间创建的分支:

    git branch --contains v2.8.0 --no-contains v2.10.0

  • git stash 支持使用 pathspecs 来暂存当前正在进行的工作,从而允许更多地控制要被暂存的内容。

  • 子模块现在有自己独立的命令,包括 checkout、grep 和 ls-files。 这意味着子模块支持递归遍历。 另外,git status --short 可以查询出有关子模块的更多状态信息。

您可以阅读完整的发版说明,详细了解 Git 2.13 版本中的新功能。

查看英文原文:Git Continues to Improve Security and UI in Version 2.13


感谢冬雨对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

GitHubGit语言 & 开发