git 中央回购级别的符号引用存储

git symbolic-ref storage at central repo level

想法是让 dev_release_branch 始终作为该环境的最新发布分支(例如 dev )的别名。

并创建新分支 post 每个版本都按照某种约定 & 每次更新 symb ref post 完成迁移或发布到相应的 en.

git symbolic-ref -m "Updating rel branch ref to new" dev_rel_3rd_Nov dev_release_branch

想要将引用及其映射名称存储在中央存储库中。有没有办法实现这个简单的 git push HEAD:refs/for/dev_branch 失败

这是为了支持增量发布过程,因此通过比较 2 个分支名称哈希来计算更改的文件会更容易..

谢谢!

Would like to store both reference & its mapped name in central repository. Is there a way to achieve this ...

不是来自 Git 协议的客户端。

此外,git symbolic-ref,因此,它要求您拼出完整的参考文献,例如:

git symbolic-ref refs/heads/foo refs/heads/master

为什么答案是"no"

让我们创建一个适当的符号引用,然后尝试推送它:

$ git branch xyz master
$ git symbolic-ref refs/heads/foo refs/heads/xyz
$ git push origin foo
To [url]
 * [new branch]      foo -> xyz

现在,在 origin 的服务器上:

$ git branch
* master
  xyz

我认为这就是您观察到的导致您说:

simple git push HEAD:refs/for/dev_branch fails

这里的问题是 push 协议根本无法推送符号引用。该协议包含一系列将引用名称设置为特定哈希 ID 的请求。符号引用是设置为 而非 哈希 ID 的字符串的引用。

这意味着从客户端,在服务器上创建新符号引用的唯一方法是直接在该服务器上执行 运行 Git 命令,例如:

ssh server "cd path/to/git/repo; git symbolic-ref ..."

fetch 协议允许检索符号引用(现代 Git),但推送协议不允许设置它们。

正如托雷克回答的那样,这是不可能的。

但对我来说,这听起来像是一个 XY 问题。

你的实际问题似乎是可以解决的:只要有一个标签 dev_release_branch 并在每次发布后更新它(在 tagpush 上使用 -f)。然后就可以创造性地使用 git loggit show 或通过 .git/refs 查找相应的单个分支名称的一些脚本。