eGit/ZendStudio 9生成的Refspec HEAD:refs/for/refs/heads/master是什么意思?

3
在ZendStudio 9中从Git设置项目(基于带有eGit的eclipse)。 它生成了一个相当普通的fetch refspec:
Remote Fetch Specification  +refs/heads/*:refs/remotes/original/*

但是有一个非常神秘的推送refspec:

Remote Push Specification   HEAD:refs/for/refs/heads/master

通过 "git ls-remote" 命令,我可以远程查看到以下信息:

8db575549dea67a45cea04358f902993c940c4d8        HEAD
16f0939153e6ef12b4596f0d4fb43fa5b8b0246b        refs/for/refs/heads/master
8db575549dea67a45cea04358f902993c940c4d8        refs/heads/master

我本地机器上通过 "git status" 命令可以看到以下信息:

On branch master
Your branch is ahead of 'original/master' by 5 commits.

请注意,我的问题不是“它是什么意思”...

我的问题是:

  • 这个工作流程是什么意思?它有什么意义?
  • 服务器上生成的 "refs/for .." 引用是用来干什么的?
  • 相比于在服务器上推送引用,使用本地分支是否更好?

提前感谢。


refs/for是由使用Gerrit Code Review的人使用的,可以在这里看到。我不确定我是否理解你的最后一个问题...你可以在本地分支上工作。推送规范可能是为了方便提交你的代码进行审查。 - John Szakmeister
好的,但是没有 Gerrit,所以这没有意义,不是吗?- ZendStudio 9 可以进行普通的克隆,让用户选择一个推送 refspec。 -> 所以我的问题在于:这是提交的常规方式,还是一个糟糕的默认值,一文不值? - tweini
1个回答

3

一般来说,Gerrit相关的refspec应该如下(在这里jszakmeister评论,在"Gerrit Code Review - Uploading Changes"中)

HEAD:refs/for/branchname

所以,如果有什么问题,应该是这样的。
HEAD:refs/for/master

但在您的情况下,您不需要那种refspec(因为您没有Gerrit)

这是一种常规提交方式吗?

不,不是。

这是一个糟糕的默认设置,毫无价值吗?

在您的情况下,是的,它没有用。

这可能是此主题提到的副作用:

确实,Gerrit与EGit功能集成和一起发货。目前没有办法从Zend Studio内部禁用Gerrit。

错误347077“使Gerrit功能可选”仍然打开。


OP tweini 评论

为了摆脱这个陷阱,我必须意识到,该ref会在远程创建一个分支,而没有关联的远程跟踪分支。

但是,要摆脱它非常容易:

  • 更改.git/config中的推送refspec为push = refs/heads/master:refs/heads/master
  • 将本地repo推送到远程git push
  • 删除远程分支git push --delete origin refs/for/refs/heads/master

谢谢您的启示,那是我需要的背景信息。 - tweini
1
为了走出这个陷阱,我必须意识到,这个ref在远程创建了一个分支,但没有关联的远程跟踪分支。但是要摆脱它非常容易:更改.git/config中的push refspec为push = refs/heads/master:refs/heads/master 将本地repo推送到远程 git push 删除远程分支 git push --delete origin refs/for/refs/heads/master - tweini
@tweini 很有趣。我已将你的评论包含在答案中以提高可见性。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接