git - Git - 检查 git notes 分支是否在远程后面
问题描述
我正在开发一个在 pre-push 上运行的 git-hook。它的目的是防止你推送分支,如果有未推送的 git 注释。为了实现这一点,我需要能够在 pre-push 挂钩期间运行一些逻辑,以检测是否有 unpush refs/notes/commits
。
不幸的是 - 我在 git 上很糟糕。
我在这里尝试了这种方法:检查本地 git repo 是否在远程之前/之后
但是当我这样做时,git merge-base refs/notes/commits origin/refs/notes/commits
git 只会告诉我:
fatal: Not a valid object name origin/refs/notes/commits
这是我的参考规范:
[remote "origin"]
url = https://github.com/dazinator/GitHookExperiment.git
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/notes/*:refs/notes/*
我已经在本地添加了一些注释,git notes add
所以我的本地仓库 - 我知道它有尚未推送的注释。当我在另一个分支(当前正在推送的分支)上时,我只是不知道运行什么 git 命令来检测这个事实。
我正在寻找一些git
可以运行的命令以产生可以解析的输出,从而给我一个明确的“是”或“否”,说明注释分支是否落后。
解决方案
这一行:
fetch = +refs/notes/*:refs/notes/*
告诉你的 Git:把他们的refs/notes/*
名字复制到我的refs/notes/*
名字。 您根本没有任何origin/refs/notes/commits
名字,您只需将他们的哈希 ID 复制到 refs/notes/commits
您自己的refs/notes/commits
.
这意味着如果您添加自己的提交注释,下一个会将它们git fetch
清除掉,因为它会获取最新的注释,丢弃(强制更新)您自己的.refs/notes/commits
如果您想维护自己的笔记,您需要将他们的笔记放在不同的地方,或者将您的笔记存储在不同的地方(其中一个)。该git notes
系统在所有这些方面都不是非常好 - 它在这里根本不是真正的用户友好型。
我建议以您自己的名字存储您的笔记,并为他们的笔记使用标准名称。我认为你可以这样做:
git config core.notesRef refs/notes/mynotes
例如。确保不要使用以下方法覆盖此注释参考:
fetch = +refs/notes/commits:refs/notes/commits
这样您就只能refs/notes/commits
从他们的refs/notes/commits
.
您现在可以使用以下方法判断您的笔记和他们的笔记是否不匹配:
git rev-parse refs/notes/commits
git rev-parse refs/notes/mynotes
这两个命令将产生两个哈希 ID。如果哈希 ID 不匹配,则您有不同的提交作为最尖端的注释提交。
(请注意,如文档所示,您可以通过多种方式临时覆盖注释名称,无论您是否refs/notes/commits
使用上述方法覆盖了默认默认名称core.notesRef
。此处的术语“默认默认”表示这refs/notes/commits
是默认值,如果core.notesRef
未设置。设置设置新的默认值。)core.notesRef
推荐阅读
- excel - 用户窗体及其选项按钮的动态值
- ruby-on-rails - 多个方法(?)和对象(即 num.to_s.chars.map{|x| x.to_i**2}.join.to_i)的规则是什么?
- caching - 您如何在客户端/浏览器上存储自定义 404 页面以在没有互联网连接时显示?
- git - 加载 bitbucket 服务器时出现致命错误
- spring-webflux - 在 Spring Reactor 中使用 BaseSubscriber 钩子与订阅者方法有什么好处?
- python - 嵌套 for 循环产生的值比预期的多-Python
- flutter - 在 Flutter 上实现配置文件弹出
- javascript - 如何在 reactjs 中设置状态数据
- assembly - 如果没有它仍然可以工作,我是否需要在 NASM 汇编函数中添加行 'mov ebp, esp'?
- python - ValueError:类的数量必须大于一;上了一堂课