3

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

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

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

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

问题:

  1. 正在做的事情有什么不同repo

  2. 我正在尝试为我们的项目定义一个“新”主分支。repo我是否真的在那个分支上,即使git没有表明这一点?

请帮我理解,让我放心……</p>

TIA

4

2 回答 2

3

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

在 Git 中,无法签出远程分支以进行工作。所有工作(即所有更改)都在本地分支机构进行。当你跑

git clone project
cd project
git checkout project/master

最后一个命令的字面意思是“签出与项目/主模式匹配的分支,在匹配的远程分支的情况下,这将导致它作为一个分离的头被签出”,但 Git 做了它以为你做的事实际上的意思是

git checkout project/master origin/project/master

它基于 origin/project/master 远程分支创建本地分支 project/master。

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

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

于 2014-10-17T06:01:17.397 回答
0

虽然repo start <branch_name> --all必须在每个 git repo 上使用相同的分支名称,但它不适合具有不同revision(远程分支)的清单。

我从这篇文章中找到了一个很好的解决方案,使用repo forall.

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

repo init <...>
repo sync
repo forall -pc 'git checkout --track $REPO_REMOTE/$REPO_RREV'

您可以检查repo forall页面以了解环境变量定义。

于 2021-05-11T08:21:51.910 回答