0

想法是让 dev_release_branch 一直充当该环境的最新版本分支的别名(例如 dev )。

并通过某种约定在每次发布后创建新分支,并在每次完成迁移或发布到各自的 en 后更新 symb ref。

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 个分支名称哈希来计算更改的文件会更容易。

谢谢!

4

2 回答 2

1

希望将参考及其映射名称存储在中央存储库中。有没有办法实现这个...

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

此外,git symbolic-ref它是一个“管道”命令(用于脚本而不是随意使用),因此,它要求您拼出完整的参考,例如:

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

为什么答案是“不”

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

$ 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

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

简单git push HEAD:refs/for/dev_branch失败

这里的问题是push协议实际上无法推送符号引用。该协议由一系列将引用名称设置为特定哈希 ID 的请求组成。符号引用是设置为不是哈希 ID 的字符串的引用。

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

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

fetch协议确实允许检索符号引用(在现代 Git 中),但 push 协议不允许设置它们。

于 2017-11-03T15:38:09.607 回答
1

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

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

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

于 2017-11-03T21:06:48.500 回答