Git符号引用的推荐用法是什么?

时间:2011-02-13 18:28:16

标签: git symbolic-references

以下shell代码正确创建了一系列符号引用

git symbolic-ref "first" "refs/heads/master"
git symbolic-ref "second" "first"
git symbolic-ref "nested/third" "second"
git symbolic-ref "refs/heads/fourth" "nested/third"

以下shell代码正确解析了最新创建的对master提示符号的引用。

git show-ref "refs/heads/fourth"

官方文档(git-symbolic-ref docgit-show-ref doc)中没有描述这些用例。

但是,以下操作不起作用

 git check-ref-format --print "first"

所以,我的问题是:

  • 可以在refs/heads目录中存储符号引用吗?
  • 链接符号引用是否可以?
  • 由于check-ref-format在传递"first"时失败,这是否意味着不建议在与"HEAD"相同的级别创建符号引用?或者这个命令可能不是为了处理符号链接?

我的目的是清楚地了解支持的内容,以及我没有解决任何问题或从中获益。

3 个答案:

答案 0 :(得分:16)

我最终将posted这个问题发给了git development邮件列表。

Junio C Hamano,主要的git维护者(+8700提交)为我提供了以下答案。

  

只有两种有效的   symrefs现在:

     
      
  • .git / HEAD,指向refs / heads / hierarchy下的某个地方;

  •   
  • .git / refs / remotes / {some remote name} / HEAD,指着某个地方   在refs / remotes / {同一个遥控器下   name} / hierarchy。

  •   
     

代码可能已准备好解决   递归symrefs,除了之外的symrefs   以上两种,symrefs   指向其他地方,但所有这些   超出了设计范围   该机制的目的是什么   支持。代码对他们做了什么   (没有崩溃)不是设计,   但只是一种未定义的行为。

     

如果我们这不会改变很多   决定重新组织遥控器   跟踪1.8.0中的层次结构。该   前者根本不会改变,而且   后者将开始指着   refs / remotes / {同一个遥控器   名称} /头部层次结构。

     

我含糊地回忆起tg滥用了symref   机制指向.git / HEAD搞笑   位置;它可能仍然这样做,   如果是这样的话,我们应该这样做   扩展上面的清单以涵盖这一点   的使用。

答案 1 :(得分:3)

通常情况下,symrefs位于refs/下 - 至少,这就是git套件所做的事情(例如,当使用git filter-tree时,你得到refs/original/...)。某些工具可能会选择忽略没有refs/前缀的引用。

$ git symbolic-ref refs/first refs/heads/master
$ git check-ref-format --print refs/first
refs/first

答案 2 :(得分:1)

希望符号链接可以更透明地使用,也可以推送。它们可以成为新工作流程的强大工具。目前,如果我创建一个符号链接然后推送是服务器将具有哈希而不是相应引用中的链接。