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

tag5nh1u  于 2022-11-20  发布在  Git
关注(0)|答案(6)|浏览(167)

我有一个远程裸仓库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.
vbopmzt1

vbopmzt11#

您可以更简单地执行此操作,确保.gitconfig处于有意义的状态:

使用Git v1.8.0及更高版本

按下时为git push -u hub master,或:
git branch -u hub/master

(This会将 * 当前 checkout 分支 * 的远程设置为**hub/master**)
git branch --set-upstream-to hub/master

(This会将名为branch_name的分支的远程设置为**hub/master**)
git branch branch_name --set-upstream-to hub/master

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

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

kcugc4gi

kcugc4gi2#

跟踪远程分支
你可以使用git-branch的track选项指定默认的远程仓库来进行推送和拉取操作。通常你可以在创建本地master分支时指定--track选项来实现这一点,但由于它已经存在,我们只需要手动更新配置,如下所示:
编辑您的.git/config

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

现在你可以简单地git push和git pull。
[source](英文)

jckbn6z7

jckbn6z73#

为完整起见:前面的答案告诉了如何设置上游分支,但没有告诉如何查看它。
有几种方法可以做到这一点:
git branch -vv显示所有分支的信息。(在大多数终端中为蓝色格式)
cat .git/config也显示了这一点。
供参考:

wlwcrazw

wlwcrazw4#

这个问题的编程版本的答案是:

git branch --list "$(git branch --show-current)" "--format=%(upstream:remotename)"

--show-current选项在Git 2.22.0版之前不起作用。

oknwwptz

oknwwptz5#

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

对于一个名为branch_name的分支,使用以下语句读取它:

git config branch.branch_name.remote

详细信息

您可以通过git config branch.branch_name.remote以编程方式读取任何给定分支的本地存储的远程跟踪远程名称。
假设你有一个名为main的分支,它跟踪的远程分支被设置为origin,在这种情况下,你的.git/config文件将包含以下内容:

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

运行此程序:

git config branch.main.remote

...将读取该配置设置并返回remote
你可以使用这些模式以编程的方式读取或写入 * 任何 * git config变量,甚至是你自己发明或创建的变量。
示例:此命令:git config --global blametool.editor subl会将以下行添加到全局~/.gitconfig文件的底部:

[blametool]
    editor = subl

你可以用下式读出变量值sublgit config blametool.editor .
这就是我如何设置一个blametool for my git blametool script

huwehgph

huwehgph6#

获得分支(例如主)的有效推动遥控的命令是:

  • git配置分支.master.pushRemote|| git配置远程.pushDefault|| git配置分支.master.remote*

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

分支.name.remote*[...]告诉git fetch和git push要从哪个远程数据库获取/推送到哪个远程数据库[...] [对于推送]可以用remote.pushDefault(对于所有分支)覆盖[并且]对于当前分支[..]进一步用branch.name.pushRemote[...]覆盖 *

出于某种原因,“man git push”只告诉分支.name.remote(即使它在三个中的优先级最低)+错误地声明如果它没有被设置,push默认为origin -它没有,只是当你克隆一个repo时,branch.name.remote被设置为origin,但如果你删除了这个设置,git push将失败,即使你仍然拥有origin remote

相关问题