中央回购级别的git symbolic-ref存储

时间:2017-11-03 10:21:29

标签: git version-control branch alias symbolic-references

想法是让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个分支名称哈希值,计算文件的更改会更容易。

谢谢!

2 个答案:

答案 0 :(得分:1)

  

想存储参考&它在中央存储库中的映射名称。有没有办法实现这个......

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

另外,git symbolic-refa "plumbing" command (meant for scripts rather than casual use),因此,它要求您拼出完整的引用,例如:

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协议不允许设置它们。

答案 1 :(得分:1)

Torek回答说,这是不可能的。

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

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