" repo init -b branch;回购状态"没有告诉你在一个分支上

时间:2014-10-16 19:09:00

标签: git git-repo

我很难理解repogit。我创建了一个分支manifest.xml文件,指定<default revision="project/master"… />

一切正常但当repo sync完成时,没有迹象表明每个项目都在该分支上。每个项目中git branch表示您不在分支机构。但是,如果您运行gitk,则可以看到您处于正确的版本。

repo checkout project/master表示没有任何项目定义了此分支。项目目录中git checkout project/master的输出看起来像是创建了一个新分支。

如果我git clone project; git checkout project/master,那么一切都如预期的那样。

问题:

  1. repo正在做什么有什么不同?

  2. 我正在尝试定义一个&#34; new&#34;我们项目的主分支。即使repogit没有表明这一点,我真的在那个分支上吗?

  3. 请帮助我理解,这样我才能放心......

    TIA

2 个答案:

答案 0 :(得分:2)

这是预期的。 Repo不会为清单中列出的远程分支创建本地分支。您可以使用repo start创建一个本地分支(或者repo start只是一个包装器的等效底层Git命令)。 Repo只检查清单指向的提交,创建一个分离的头。

在Git中,远程分支机构无法检查工作。所有工作(即所有变更)都在当地分支机构进行。你跑的时候

git clone project
cd project
git checkout project/master

最后一个命令的字面含义是&#34;检查与项目/主模式匹配的分支,在匹配的远程分支的情况下,将使其作为分离的头部检出&#34; ,但Git做了它认为你实际上意味着什么

git checkout project/master origin/project/master

根据origin / project / master远程分支创建本地分支项目/ master。

Repo的行为可能看起来很奇怪,但预期的工作流程是为您正在处理的每件小事创建主题分支。 Repo不知道你在特定的git中会做什么(如果有的话),所以为你创建分支会是冒昧的。

另外,请记住,清单并不一定指向分支。 revision属性可以指向标签甚至是SHA-1,为它们创建本地分支也没有意义。

答案 1 :(得分:0)

虽然 var searchResponse = client.Search<Data>(s => s .Index("my-data") .Sort(so => so .Ascending(f => f.DeviceCode.Suffix("keyword_lowercase")) ) ); 必须在每个 git repo 上使用相同的分支名称,但它不适用于具有不同 repo start <branch_name> --all(远程分支)的 manifest。

我使用 revision 从这个 post 找到了一个很好的解决方案。

您可以使用以下流程来确保每个子 git repo 不处于无头状态并使用同一分支进行跟踪。

repo forall

您可以查看 repo forall 页的环境变量定义。