在我们的项目中,我们一直使用本地 IP 地址作为来源。现在,我们已经搬到现场工作,需要使用远程 ip 进行推/拉。
使用manage remotes
, 选项我已将新 ip 保存为origin_remote
并尝试将我的代码推送到那里,但由于某种原因,我收到了此警告(或信息消息)。我不确定我是否做错了什么。操作不应该很顺利,因为我只是在更改 ip 并基本上推送到同一个 repo 吗?为什么 git 告诉我这是一个新分支?
在我们的项目中,我们一直使用本地 IP 地址作为来源。现在,我们已经搬到现场工作,需要使用远程 ip 进行推/拉。
使用manage remotes
, 选项我已将新 ip 保存为origin_remote
并尝试将我的代码推送到那里,但由于某种原因,我收到了此警告(或信息消息)。我不确定我是否做错了什么。操作不应该很顺利,因为我只是在更改 ip 并基本上推送到同一个 repo 吗?为什么 git 告诉我这是一个新分支?
其他答案已经涵盖了为什么会发生这种情况,并解释说这不是 Git,而是 GitExtensions 警告。
所以我会建议一些东西来试图让这个信息消失。我在 Windows 7 上使用 Git Extensions 2.48.05 和 git 版本 1.9.5.msysgit.0 在两个虚拟存储库上对其进行了测试。(此时堆栈溢出不允许我添加屏幕截图。)
./git/config
(以防万一)[branch "..."]
和[remote "..."]
部分,并保存文件。Repository -> Remote repositories...
Name
例如,origin_remote
Url
输入您要推送/拉取的 URLSave changes
New remote
会弹出对话框
是否要自动配置此遥控器的默认推送和拉取行为?
按Yes
。这应该会自动添加远程分支引用并执行 run git remote update
。关闭对话框并刷新 Git Extensions 以在存储库图(浏览)视图中查看远程引用的状态。它们应该看起来像本地分支机构,但颜色为绿色,名称格式为origin_remote/your_branch_name
现在,当您Push
在字段中使用对话框时,请Remote
选择origin_remote
. 您应该不再看到任何警告。
最后,您应该./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
虽然 VonC 已经正确回答,但只是一些额外的细节:
Git Extensions 仅检查本地config
文件以做出这个错误且非常有问题的假设。
本地存储库可以有多个远程,但文件branch
中的每个分支只能有一个部分config
,将分支映射到特定的远程(无论如何,将分支映射到更多远程是没有意义的,因为该branch
部分是仅用于简化push
andpull
命令,允许您省略remote
andbranch
参数)。
在一个场景(如我们的场景)中,为存储库指定了多个遥控器,但当然该branch
部分仅映射到其中一个,每次您尝试推送到其中一个辅助遥控器时都会出现此警告。如果您习惯了它没关系,但对于那些第一次看到它的人来说,它会变得有问题,因为它立即给出了一些可能应该避免的错误即将发生的想法。
消息本身,令人困惑。它的放置方式给出了 Git Extensions 实际上已连接到远程存储库的想法,通过它并发现分支不存在那里。但事实并非如此,分支已经存在于远程存储库的/refs
. Git Extensions 仅检查本地config
文件,因此该消息提供了错误信息。
通常 Git Extensions 确实应该在显示这样的消息之前连接到远程存储库,但即使在这种情况下,推送新分支也没有错,就像push
也可以删除远程存储库中的分支一样,在这种情况下,因为Git Extensions 只检查本地config
文件,您可能根本不会收到警告,尽管它比添加一个更危险。
这似乎只是一个 Git 扩展警告(即单独的 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 扩展如何记录上游分支:
使用命令行 git 命令检查:
git config branch.master
查看 branch.master.remote 是否仍指向旧IP 地址而不是别名 ' origin
',同时git remote -v
显示origin
新 IP 地址。
如果是这样,请使用远程名称重新记录上游分支:
git config branch.master.remote origin