使 git 输出所有命令的完整(未缩写)哈希值?

2024-01-04

问题更新

(注意:我已经接受了罗兰的回答,因为它确实是正确的(并且 最简单)从 git 1.7.4.4 开始的解决方案,但请考虑这个问题 打开有关 git 低至 1.7.0.4 的早期版本的信息。)

这个问题有点漫无目的(主要是由于我的编辑造成的) 随后尝试建立有关情况的更多信息),但 标题中的文字是最重要的部分。

也就是说:我正在尝试建立明确的方法来确保allgit 命令将在其输出中显示完整(未缩写)的哈希值。

由于我专注于向后兼容性,因此需要覆盖旧版本 git 1.7 的。Ideally该解决方案适用于 git 1.7.0.4(用于 仍然受支持的 Ubuntu 10.04 LTS),但我会很高兴至少 1.7.2.5(适用于 Debian 6/Squeeze LTS)。任何需要晚于版本的东西 1.7.9.5(Ubuntu 12.04 LTS)绝对不理想,但我仍然很想听听 关于他们。

请注意,我不想失去ability有缩写的哈希值 -- 这个问题背后的目的是确保工具与 git 交互 始终可以访问完整且明确的哈希值。当我手动使用 git 时 在命令行中,我大部分时间都需要正常的缩写。

Roland Smith 关于利用命令行参数覆盖的建议core.abbrev看起来很理想,但遗憾的是只能从 v1.7.4.4 开始工作(如core.abbrev以前不存在)。我suspect这意味着我们确实需要确定 最全面的命令特定参数集(例如git blame -l) 才能产生同等的效果。

带有编辑的原始问题

一些(大多数?)git 命令default输出缩写的哈希值。为了 实例两者git blame and git-annotate这样做,这个事实正在绊倒 当发生冲突时提高当前的 Emacs 支持(就像他们在 git 之前可以做的那样) 1.7.11.1 - 请参阅下面的编辑 1),因为不明确的哈希值随后会导致错误 试图对它们采取行动)。


开始编辑1

我在变更日志中注意到以下内容,这表明最初的问题 这促使这个问题在更新的版本中不会出现 git。

Fixes since v1.7.11.1
---------------------
 * "git blame" did not try to make sure that the abbreviated commit
   object names in its output are unique.

如果是这样的话 git 应该保证唯一性(至少在 运行命令的时间)对于任何 git 命令报告的所有对象名称,然后 这将大大减轻我的担忧;但显然是一个解决方案 支持早期版本的 git 的问题仍然是 兴趣。

结束编辑1


这可以通过以下方式修复git blame -l and git annotate -l,但我不知道 这两个命令是否是孤立的情况,我想确保 在其他情况下不会出现此问题。

唯一相关的配置 https://www.kernel.org/pub/software/scm/git/docs/git-config.html我可以看到是core.abbrev:

设置对象名称缩写的长度。如果未指定,则有许多命令 缩写为 7 个十六进制数字,这对于缩写对象来说可能不够 名称在足够长的时间内保持唯一。

(但我不想删除option看到一个简短的提交),以及log.abbrevCommit which:

如果为 true,则使 git-log(1)、git-show(1) 和 git-whatchanged(1) 假设--abbrev-commit。您可以使用以下命令覆盖此选项--no-abbrev-commit.

The --no-abbrev-commit不过,争论并不是一致的——我认为 只有该引用中提到的命令才能识别它(但请参阅编辑 2 以下)。


开始编辑2

The 解析选项 API 文档 https://www.kernel.org/pub/software/scm/git/docs/technical/api-parse-options.html states:

布尔长选项可以是negated (or unset)通过前置no-,例如--no-abbrev代替--abbrev。相反,以no-negated通过删除它。

所以接受的命令--abbrev(其中有很多)实际上会 全部接受--no-abbrev还有?这个否定选项通常不会被提及; 虽然--abbrev=40当然,目前是等价的,即使没有 可以否定)。

我不清楚默认的布尔否定选项功能是什么时候 然而,介绍了。

在我的版本1.7.9.5中git-blame --no-abbrev结果为单字符对象 名称。事实上它是一样的--abbrev=0,正如指责使用的那样n+1人物。 相反,我注意到git branch -v --abbrev=0给出满分 40 人物。

结束编辑2


潜在问题命令及其相应选项的完整列表 会很棒,尽管理想的解决方案是 (或者至少应该)受到所有 git 命令的尊重(包括future命令),但仍保留在需要时显示缩写哈希的能力?

我想到的一个丑陋的方法是创建一个 git 配置文件imports原始配置文件(尽管我注意到导入只是 从 1.7.10 开始可用),然后设置core.abbrev至 40;并通过使用它 暂时的GIT_CONFIG调用 git 时的环境变量,只要已满 提交是必要的。我想这会起作用,但我宁愿不这样做。

显然存在错误,并且其中一些错误至少已经被解决了 固定的;但由于目标是支持尽可能多(尽可能多)的 git 版本 用户可能碰巧正在运行,我正在寻找的东西是 向后兼容。

对于它的价值,这是我从 grep 手册中收集到的内容 版本1.7.12.4:

接受命令--abbrev(因此理论上也--no-abbrev):

  • blame
  • branch
  • cli
  • describe
  • diff
  • 差异索引
  • 差异树
  • log
  • ls-files
  • ls-tree
  • rev-list
  • 转解析
  • show-ref

其他选项:

  • git注释-l
  • git 责备-l
  • git diff --完整索引
  • git log --no-abbrev-commit
  • git show --no-abbrev-commit
  • git Whatchanged --no-abbrev-commit

Using git -c core.abbrev=40 <command>应该适用于所有命令,因为它“将覆盖配置文件中定义的任何内容”。

好像有介绍过8b1fa778676ae94f7a6d4113fa90947b548154dd https://github.com/git/git/commit/8b1fa778676ae94f7a6d4113fa90947b548154dd(登陆版本 1.7.2)。

Edit2:正如菲尔斯所注意到的,core.abbrev1.7.4.4 中添加了参数。

Edit:W.r.t。硬编码的哈希长度,您始终可以通过查看中的文件名长度来查找哈希长度.git/objects/*初始化您的程序/库时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 git 输出所有命令的完整(未缩写)哈希值? 的相关文章

  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • Azure git 部署 - 第二个程序集中缺少引用

    我正在尝试将 Bitbucket 部署设置到 Azure 网站 我成功链接了 Bitbucket 和 Azure 但是当我推送到 Bitbucket 时 我在 Azure 站点上收到以下错误 如果我单击 查看日志 它会显示以下编译错误 D
  • Git子模块绝对工作树路径配置

    这是我的子模块redmine 仪表板配置文件 子模块配置文件 core repositoryformatversion 0 filemode true bare false logallrefupdates true worktree Us
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • 如何将一个文件存储库上传到 Gist,并保留历史记录?

    我的计算机上有一个包含单个文件的 Git 存储库coins py 我如何才能将其作为 Github 上的要点来保存历史 这其实很简单 您可以将现有历史记录移动到 Gist 存储库中 就像将其移动到任何其他存储库中一样 创建要点 只需输入一些
  • gitattributes 中的`* text=auto eol=lf` 会做什么?

    我们的 gitattributes 文件中有这样的内容 text auto eol lf 我想准确理解这是做什么的 第一部分是text auto 来自文档 http git scm com docs gitattributes 这确保了所有
  • 从预提交挂钩中排除某些文件类型

    我想要一个预提交 git 钩子来检查 如果可能的话 自动删除 尾随空格 In 让 git 在提交之前自动删除尾随空格 https stackoverflow com questions 591923 make git automatical
  • 如何在 git 交互式 rebase 中将提交与下一个提交合并?

    git rebase i允许通过以下方式将提交与前一个提交合并squash or fixup 这两个选项都需要至少一次提交pick ed 当一个人想要使用第一个提交但丢弃其提交消息时 情况怎么样 换句话说 如果我希望第一个提交与后续提交合并
  • git checkout HEAD -- 和有什么区别?和 git reset --hard HEAD?

    我已经查看了这个 stackoverflow 链接 但我认为我所要求的之间的细微差别是使用HEAD在结账命令中 因为他们的建议似乎不起作用 git reset hard HEAD 和 git checkout 之间有区别吗 https st
  • 如何更改全局 git 设置以在拉取期间进行 git 合并

    目前 我的全局设置设置为在 git pull 期间执行变基操作 我希望它默认将其更改为 git merge 如何更改此设置 TL DR git config global pull rebase false 有点细节 Git 使用配置pul
  • GitPython - 使用 ssh 密钥克隆 - 主机密钥验证失败

    我在应用程序中克隆 git 存储库时遇到问题 KEY FILE opt app ssh id rsa def read git branch config id branch config RepoConfig objects get id
  • 无法快速删除 Git 中的许多文件

    我删除了 Git 分支中的 777 个文件新功能 by rm example 我愿意承诺 Git 要求我手动删除每个已删除的文件 git rm file 对于所有名称不相似的 777 个文件 编写上述命令将花费大量时间 如何删除我的 Git
  • Mac 到 EC2 - 源代码控制三角问题 - git?同步?啥?

    我有一个日常 EC2 实例 事实上 请注意那些更改IP每次重新启动它们时 都会出现另一个问题 实例上有一个文件夹 我在文件夹 mysql express 等 中有一个简单的 比如说 节点项目 比方说 这是一个网站 那么在我的 Mac 上进行
  • 如何从 git 存储库中删除作者?

    如果我创建一个 Git 存储库并公开发布它 例如在 GitHub 等上 并且我收到存储库贡献者的请求 无论出于何种原因删除或隐藏他们的名字 有没有一种方法可以轻松做到这一点 基本上 我有这样的请求 可能想将他们的姓名和电子邮件地址替换为 匿
  • 在防火墙后面使用 GitHub,无需 SSH 访问

    我真的很想使用 GitHub 但我的公司一切都被锁定了 现在 我只能通过HTTP协议使用Tortoise SVN 我可以以同样的方式使用 GitHub 吗 如果是这样 怎么办 我认为你一直能够克隆github https github co
  • 将存储库从 Github 移至 Gitlab

    有没有办法将整个存储库从 Github 移动到 GitLab 对于代码本身来说 只需在 GitLab 上创建一个新的存储库并推送到它即可 Wiki 页面位于 Github 上的单独分支中 并通过 Git 机制进行管理 据我所知 GitLab
  • 从“git diff”中排除文件

    我正在尝试排除一个文件 db irrelevant php 来自 Git diff 我尝试将文件放入db子目录名为 gitattributes与线irrelevant php diff我还尝试创建一个名为 git info attribut
  • 撤消多个文件和文件夹“git add”[重复]

    这个问题在这里已经有答案了 我执行了 git add 现在我想恢复 git add 我怎样才能做到这一点 git reset 这相当于git reset HEAD 将取消 add 更常见的是 取消暂存 所有文件 In Git revert用
  • 是否可以使用“最小”算法进行交互式添加?

    当从快照计算变更集时 Git 并不总是正确选择块边界 git diff has a diff algorithm允许在这方面进行一些调整的选项 git diff minimal有时会给出比git diff alone 有没有办法获得相同的优
  • 如何使用最近的标签来装饰 git 日志?

    git log decorate将相关引用的信息添加到日志输出中 commit 9e895ace5d82df8929b16f58e9f515f6d54ab82d tag v3 10 rc7 Author Linus Torvalds lt

随机推荐

  • Tensorflow:在单次运行中分配多个变量值,无需重新计算其他表达式

    我是 Tensorflow 的新手 很抱歉 因为这似乎是一个非常基本的问题 但不幸的是我在 Google 上找不到任何内容 也许我使用了错误的关键字 我有一些从占位符派生的表达式 据我了解张量流的逻辑 以及一些需要在不重新计算 占位符 表达
  • RecyclerView 中的 NullPointEreException

    我尝试从 AsyncTask 中的服务器下载列表并将其放入 recyclerView 中 但是 我仍然在 RecyclerView 上收到 NullPointException 并且不知道为什么 我设置了 LayoutManager 和其他
  • 根据相似度对图像进行聚类

    我面临着基于相似性的图像聚类问题 而不知道聚类的数量 理想情况下 我想实现类似这样的目标http cs231n github io assets cnnvis tsne jpeg http cs231n github io assets c
  • 无法解析相应的jni函数

    我正在制作一个通过串口发送数据的应用程序 这需要从本机库调用方法 我有两个本机方法 打开 关闭 我使用 ndk 生成了 so 库并将它们放入 jnilibs 文件夹中 但仍然给出错误 无法解析相应的 jni 函数 串口 c include
  • 如何使这种组合/排列方法递归?

    我有一个字符串数组列表 希望将所有可能的组合存储到另一个集合中 例如 air bus car gt air bus car air bus air car bus air bus car car air car bus air bus ca
  • 如何监视另一个应用程序的数据库的更改?

    我想监视另一个应用程序 SQLite 数据库的更改 由于 Android 不允许我访问其他应用程序的内部数据 因此我需要一个根应用程序 这正是我的应用程序 有没有办法可以监视系统上文件的更改并在我的应用程序中触发事件 我用谷歌搜索了一下 看
  • jQuery 颜色选择器推荐 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要非常轻的 jquery 颜色选择器插件 它允许用户将鼠标拖动到色轮上 并能够选择透明颜色 或 空白 无 有什么建议么 我从谷歌得到了
  • 如何简洁地编写包含数据框中许多变量的公式?

    假设我有一个响应变量和一个包含三个协变量的数据 作为玩具示例 y c 1 4 6 d data frame x1 c 4 1 3 x2 c 3 9 8 x3 c 4 4 2 我想对数据进行线性回归 fit lm y d x1 d x2 d
  • 如何在当前机器上运行jvm

    想象一下 两个 java 项目在 JDK1 5 和 JDK1 6 上运行 其中两个是在 JDK 1 7 上工作的 如何获取正在运行的jvm名称 pid和项目名称就可以了 结果应该是这样的 pid 1234 projec tname prj1
  • iOS:失去蓝牙连接

    我成功地使用蓝牙连接了 iPhone 和 Mac iPhone 是中心 Mac 是外围 连接后 两者可以通信 iPhone 订阅了 Mac 宣传的一些特性 但是 一段时间 随机 之后 iPhone 的蓝牙图标变灰 并且 iPhone 不再接
  • 调用未定义的方法 Illuminate\Foundation\Application::bindShared()

    我刚刚将 Laravel 从 5 0 升级到 5 1 我收到此错误 Call to undefined method Illuminate Foundation Application bindShared 因此 经过一番搜索后 我需要将b
  • 内置变量中的可变默认参数

    我们都知道 可怕的可变默认参数 https stackoverflow com questions 1132941 least astonishment and the mutable default argument 我惊讶地发现至少有一
  • 使用非 SQL 数据库是否就无需防范“SQL 注入”?

    这似乎是一个显而易见 或不那么明显 的问题 但让我解释一下 我正在使用 Google 的数据库技术 BigTable 编写 Google App Engine 网站 任何 App Engine 程序员都会知道 Google 有自己的有限查询
  • 在 Git Web hook 之后重新启动 Plesk 17.5 上的 Node 应用程序

    目前 我在 Plesk 17 5 中的一个非常基本的 NodeJS 服务器上设置了自动 Git 部署 问题是 如果我推送新的提交 我需要手动登录 Plesk 仪表板并单击 重新启动应用程序 否则更改不会生效 我尝试添加npm start作为
  • 关于在画布上显示照片是否存在已知的 Win32 Tkinter 错误?

    我注意到 tkinter 有一个非常奇怪的错误 我想知道这是否是因为 python 与 tcl 交互的方式有问题 至少在 Win32 中是这样 这里我有一个超级简单的程序 可以显示 gif 图像 它工作完美 from Tkinter imp
  • 如何将优先级升级到log4j-2?

    我正在尝试将 log4j 升级到 log4j2 我尝试升级的特定代码行是 log targetClass Priority DEBUG INT message null 静态场Priority DEBUG INT在新版本中不再可用Prior
  • NoSuchMethodError:在 null 上调用了方法“ancestorStateOfType”

    我正在像这样的 iam 流列表那样进行屏幕更改 当它发出时我会更改屏幕 override void initState super initState appBloc error listen data scaffoldKey curren
  • 我可以将资产文件夹中的文件移动到资产子文件夹中吗?

    我的资产文件夹中有一个文件 当我按下程序中的按钮时 我必须将该文件移动到子文件夹 运行时 中 能做到吗 我必须这样做 资产 文件 txt gt 资产 aaa 文件 txt 不会 您的资源会被编译到您的 apk 文件中 考虑存储一个持久的首选
  • F# 元组类型的模式匹配

    我有一个柯里化函数 我希望它支持不同类型的参数 这些参数不具有继承关系 type MyType1 A B of float type MyType2 C D of int 我试图做的是 let func x y match x y with
  • 使 git 输出所有命令的完整(未缩写)哈希值?

    问题更新 注意 我已经接受了罗兰的回答 因为它确实是正确的 并且 最简单 从 git 1 7 4 4 开始的解决方案 但请考虑这个问题 打开有关 git 低至 1 7 0 4 的早期版本的信息 这个问题有点漫无目的 主要是由于我的编辑造成的