【问题标题】:git hooks- fetch git commit idgit hooks - 获取 git commit id
【发布时间】:2018-07-06 15:46:55
【问题描述】:

我想在用户推送到 GitHub 之前或在用户从 GitHub 克隆之后获取存储库的当前 git 提交 ID。然后应该将此提交 ID 写入一个文件,该文件也在存储库中。是否可以使用任何 Git 钩子来做到这一点?

我有一个显示当前 git id 的 c++ 函数。如果用户下载(.zip)我的存储库,它应该显示他们下载时存在 GitHub 的提交 ID。如果他们克隆 repo,稍后提交,git id 应该会更新。有什么办法吗?

【问题讨论】:

  • 我不清楚你为什么要这个。听起来您要求 git 挂钩在 git 存储库中写入一个文件,该文件记录该存储库的 git 提交哈希。你试过git log吗?
  • 顺便说一句,你为什么要这样做?由于 git 是一种基于分支的方法,因此这可能会产生一些您没有预料到的副作用。例如,这个包含提交 ID 的文件是否会为所有用户命名?您是否意识到,如果您捕获当前提交并推送到远程,那么在合并到您的主分支后,这将不是 HEAD 的提交 ID?
  • Do you realize that if you capture the current commit and push to remote that that will not be the commit id of HEAD after your merge to your main branch? 是的,必须相同。 id 应该更新。那么有什么方法可以实现这一点吗?有一个始终存储当前 git commit id 的文件吗?
  • 不妨问问如何运球。有什么意义,在这里?这有什么用?
  • 我无法弄清楚我应该在问题中添加什么。究竟缺少什么?需要哪些额外信息?

标签: git githooks


【解决方案1】:

你当然可以这样做,不知道为什么,但这是可能的。

注意,git 使用分支,所以你必须知道哪个分支是你的主分支,假设master

  1. 使用 git log command 和一些选项从主分支上的远程 HEAD 获取提交 ID。

    $ git log origin/master -n 1 --pretty=format:"%H"

  2. 将其输出到文件中。

    $ git log origin/master -n 1 --pretty=format:"%H" > top_commit.txt

  3. 把它放在一个shell脚本中,这样你就可以重复使用了。

  4. 为所需的事件添加一个 githook,我假设它是 pre-commit。有关更多信息,请参阅https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

您可以做的事情有一些限制。例如,我知道您可以为预提交执行此操作,但不确定克隆时是否需要这样做。此外,必须安装客户端 githooks。您需要编写一个脚本来为您的用户安装这些脚本。

更新

类似于您所问的事情是可能的,但不完全是;我认为不可能抓住提交正在进行并将其推送到一个文件中,然后将该文件包含在同一个提交中。

此外,我不确定您为什么要这样做,因为 git log 有完整的历史记录。

有充分的理由想知道和使用 HEAD 的提交 ID,但我们需要知道为什么、何时、何地、如何等,以进一步帮助您。

【讨论】:

  • 您仍然希望使用带有上述选项的git log 命令,何时执行取决于您想要执行的操作。我会根据我认为你现在正在尝试做的事情进行更新。
  • 提交 id 未在提交前生成。如果我使用 post-commit,则不会提交对文件所做的更改,因此不会将其推送到 GitHub。有没有其他办法?
  • 没有。我误解了你想做什么。我以为您试图从原始存储库中获取 HEAD 的提交 ID,而不是捕获当前提交的提交 ID。请在上面的问题中说明此请求背后的目的或原因,这将极大地帮助回答这个问题。可能还有另一种方法可以实现您的目的,因为目前我无法理解您为什么要这样做。
猜你喜欢
  • 2023-03-15
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多