Git:分支的默认配置远程是哪个?


192

我有一个远程的裸仓库hub。我只在master分公司工作。以下是该错误消息的最后一句话,使我感到奇怪:我如何找出“当前分支的默认配置远程服务器”?我该如何设置呢?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

Answers:


230

跟踪远程分支

您可以使用git-branch的track选项指定用于推送和拉出的默认远程存储库。通常,在创建本地master分支时可以通过指定--track选项来执行此操作,但是由于它已经存在,因此我们将手动更新配置,如下所示:

编辑你的 .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

现在您可以简单地进行git push和git pull。

[ 来源 ]


如果OP这么做了,也不会设置吗 git pull hub master吗?
Ryan Bigg

@Ryan Bigg:不是自动的,否则您总是会搞砸配置。

36
出于这个原因,为什么在存在git命令时编辑配置文件?
urschrei'1

43
git branch --set-upstream local_branch remote / remote_branch(或在推送时,如下所述)
urschrei 2011年

25
@scragz:不可能!命令方法可确保.gitconfig保持有意义的状态。
smci

260

您可以更简单地做到这一点,从而确保您的 .gitconfig处于有意义的状态:

使用Git v1.8.0及更高版本

git push -u hub master 推动时,或:
git branch -u hub/master

要么

(这将为 当前签出的分支hub/master
git branch --set-upstream-to hub/master

要么

(这将为名为的分支设置远程 branch_namehub/master)。
git branch branch_name --set-upstream-to hub/master

如果您使用v1.7.x或更早的版本

您必须使用--set-upstream
git branch --set-upstream master hub/master


3
对于任何想知道的人:第二个命令可用于现有分支机构
Eric Hu

1
@埃里克-胡详见我的答案在这里:stackoverflow.com/questions/4878249/...
urschrei

1
set-upstream[-to]命令更改当前配置的遥控器。原始发布者询问了默认配置的遥控器。当然,这不是完全相同的概念吗?
Steve Pitchers 2013年

1
每个分支都有一个当前配置的远程,该远程指定该远程上的哪个分支对应于本地分支。在默认的远程配置确定哪个分支推,或者如果你没有明确指定一个拉动。此答案仅设置当前答案。接受的答案(手动编辑)还允许您设置默认答案。有人知道避免手动编辑的命令吗?
Steve Pitchers 2013年

1
--set-upstream-to进行了与.git/config@scragz在其答案中建议的完全相同的更改。
strah 2014年


-1

获取分支(例如主节点)的有效推送远程的命令是:

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

原因如下(来自“ man git config”输出):

branch.name.remote [...]告诉git fetch和git push可以使用remote.pushDefault(对于所有分支)[和] 覆盖从[push]推送到[...]的远程对象。当前分支[..]进一步被branch.name.pushRemote [...] 覆盖

出于某种原因,“ man git push”仅告诉有关branch.name.remote的信息(即使它的优先级最低),但错误地指出,如果未设置,则将推默认值设置为origin-它不会,只是克隆存储库时,branch.name.remote设置为origin,但如果删除此设置,即使您的原始源仍处于远程状态,git push也将失败


该问题已得到更有用的回答。
奥斯汀·谢弗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.