想法是让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个分支名称散列,计算更改的文件将更容易。。
谢谢!
希望同时存储引用&它在中央存储库中的映射名称。有没有办法做到这一点。。。
不是通过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中),但推送协议不允许设置它们。
正如torek所回答的,这是不可能的。
但对我来说,这听起来像是一个XY问题
您的实际问题似乎是可以解决的:只需有一个标记dev_release_branch
,并在每次发布后更新它(在tag
和push
上使用-f
)。然后可以创造性地使用git log
、git show
或通过.git/refs
进行的一些脚本编译来找到相应的单个分支名称。