Git:“您即将推出的分支似乎是远程”警告的新分支

时间:2013-06-17 11:37:32

标签: git git-push git-remote

在我们的项目中,我们一直使用本地IP地址作为原点。现在,我们已经转移到现场工作,需要使用远程IP推送/拉动。

使用manage remotes选项我已将新IP保存为origin_remote并尝试将代码推送到那里但由于某种原因我收到此警告(或信息消息)。我不确定我做错了什么。不应该操作顺利,因为我只是改变ip并且基本上推送到同一个回购?为什么git告诉我这是一个新的分支?

3 个答案:

答案 0 :(得分:1)

其他答案已经涵盖了为什么会发生这种情况,并解释说这不是Git,而是GitExtensions警告。

所以我建议尝试让消息消失。我在两个虚拟存储库上测试它,在Windows 7上使用Git Extensions 2.48.05和git version 1.9.5.msysgit.0 。(Stack Overflow现在不允许我添加截图。)

  1. 从您的存储库备份./git/config(以防万一)
  2. 删除所有[branch "..."][remote "..."]部分,然后保存文件。
  3. 在Git Extensions菜单中选择Repository -> Remote repositories...
  4. Name中添加您喜欢的内容,例如origin_remote
  5. Url中输入要从
  6. 推送/拉出的网址
  7. Save changes
  8. 将弹出
  9. New remote对话框
      

    您是否要自动配置此遥控器的默认推拉行为?

  10. Yes。这应该会自动添加远程分支引用并执行run git remote update。关闭对话框并刷新Git Extensions以在存储库图(Browse)视图中查看远程引用的状态。它们应该看起来像本地分支,但颜色为绿色,名称格式为origin_remote/your_branch_name

  11. 现在,当您在Push字段中使用Remote对话框时,请选择origin_remote。你不应再看到警告。

  12. 最后,您应该在本地存储库的./git/config中获得类似的内容:

    [remote "origin_remote"]
        url = URL_TO_YOUR_REPOSITORY
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "your_branch_name"]
        remote = origin_remote
        merge = refs/heads/your_branch_name
    [branch "your_other_branch_name"]
        remote = origin_remote
        merge = refs/heads/your_other_branch_name
    

答案 1 :(得分:0)

这似乎只是a Git Extension warning(即git一个人不会给你同样的警告)。

//Extra check if the branch is already known to the remote, give a warning when not.
//This is not possible when the remote is an URL, but this is ok since most users push to
//known remotes anyway.
if (TabControlTagBranch.SelectedTab == BranchTab && PushToRemote.Checked)
{
  //If the current branch is not the default push, and not known by the remote
  //(as far as we know since we are disconnected....)
  if (RemoteBranch.Text != GetDefaultPushRemote(_NO_TRANSLATE_Remotes.Text) &&
    !Module.GetHeads(true, true).Any(x => x.Remote == _NO_TRANSLATE_Remotes.Text && x.LocalName == RemoteBranch.Text) )
    //Ask if this is really what the user wants
    if (!Settings.DontConfirmPushNewBranch)
      if (MessageBox.Show(owner, _branchNewForRemote.Text, _pushCaption.Text, MessageBoxButtons.YesNo) ==
DialogResult.No)
      {
        return false;
      }
}

这取决于git扩展名did record the upstream branch

使用命令行git命令检查:

git config branch.master

查看branch.master.remote是否仍然指向 IP地址而不是别名“origin”,而git remote -v确实显示origin新的IP地址。

但是,如果使用远程名称重新记录上游分支:

git config branch.master.remote origin

答案 2 :(得分:0)

虽然VonC已经正确回答了,但还有一些其他细节:

Git Extensions仅检查本地 config 文件,以便做出错误且非常有问题的假设。

本地存储库可以有多个远程存储库,但是对于 branch 文件中的每个分支只能有一个config部分,将分支映射到特定的远程(将分支映射到更多遥控器是没有意义的,因为branch部分仅用于简化pushpull命令,允许您省略 remote branch 参数。)

在一个场景(如我们的)中,为存储库指定了多个遥控器,但当然branch部分只映射到其中一个,每次尝试推送到其中一个时,都会出现此警告那些辅助遥控器。如果你已经习惯了它没关系,但是对于第一次看到它的人来说它会成为问题,因为它立刻就会发现一些错误即将发生的想法应该被避免。

信息本身令人困惑。它的方式,给出了Git Extensions实际连接到远程存储库的想法,经历了它并发现该分支不存在。但事实并非如此,分支机构已存在于远程存储库的 /refs 中。 Git Extensions仅检查了本地 config 文件,因此该消息提供了错误信息。

通常Git Extensions应该在显示这样的消息之前连接到远程存储库,但即使在这种情况下,推送新分支也没有错,就像push也可以删除远程分支一样存储库,在这种情况下,由于Git Extensions仅检查本地 config 文件,您可能根本不会收到警告,尽管它比危险更多加一个。