'git remote show'的详细解释

Kla*_*urn 6 git branch remote-branch git-remote git-branch

老实说,找不到任何详细的输出文档git remote show(当然不在手册页上)

特别是,Local可以理解这些部分的清晰,准确的解释.

我发现令人困惑的一个例子:

这里我有两个遥控器,klasorigin以及它们产生的输出:

> git remote show klas
* remote klas
  Fetch URL: ..\klasrepo
  Push  URL: ..\klasrepo
  HEAD branch: master
  Remote branches:
    experiment  tracked
    feature     tracked
    master      tracked
    pu          tracked
    stashbranch tracked
  Local branch configured for 'git pull':
    pu merges with remote pu
  Local refs configured for 'git push':
    experiment pushes to experiment (fast-forwardable)
    feature    pushes to feature    (fast-forwardable)
    master     pushes to master     (fast-forwardable)
    pu         pushes to pu         (up to date)
> git remote show origin
* remote origin
  Fetch URL: C:/Temp/git/.\barerepo.git
  Push  URL: C:/Temp/git/.\barerepo.git
  HEAD branch: experiment
  Remote branches:
    experiment tracked
    master     tracked
  Local branches configured for 'git pull':
    experiment  merges with remote experiment
    master     rebases onto remote master
  Local refs configured for 'git push':
    experiment pushes to experiment (up to date)
    master     pushes to master     (fast-forwardable)
Run Code Online (Sandbox Code Playgroud)

请注意,两者都列出了实验数据.那是什么意思?我已经配置了masterexperiment来分别跟踪origin/masterorigin/experiment(和pu来跟踪klas/pu). local refs configured for 'git push'

我的本地功能分支没有设置为跟踪任何内容,但仍然列在local refs configured for 'git push'(唯一的连接似乎是相同的名称,另一个非跟踪分支,foo,未提及).git push虽然在功能给予fatal: The current branch feature has no upstream branch.- 几乎"快速转发".

似乎列出的本地分支的标准local refs configured for 'git push'是,恰好存在一个具有相同名称的远程分支?

以供参考:

> git branch -vva
  experiment                0cf7b2a [origin/experiment] added rand content 82 to .\rand_content.txt
* feature                   4b25f46 added rand content 62 to bar.txt
  foo                       40aee50 added rand content 17 to .\rand_content.txt
  master                    4b25f46 [origin/master] added rand content 62 to bar.txt
  pu                        44ad10b [klas/pu] added rand content 51 to doo.txt
  remotes/klas/experiment   1f4e89b app
  remotes/klas/feature      884e953 added rand content 80 to bar.txt
  remotes/klas/master       57877c1 added in tobias repo
  remotes/klas/pu           44ad10b added rand content 51 to doo.txt
  remotes/klas/stashbranch  8678cf0 added rand content 44 to .\rand_content.txt
  remotes/origin/HEAD       -> origin/master
  remotes/origin/experiment 0cf7b2a added rand content 82 to .\rand_content.txt
  remotes/origin/master     4b25f46 added rand content 62 to bar.txt
> git config --list --local | select-string 'branch|remote'
remote.origin.url=C:/Temp/git/.\barerepo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.master.rebase=true
remote.klas.url=..\klasrepo
remote.klas.fetch=+refs/heads/*:refs/remotes/klas/*
branch.experiment.remote=origin
branch.experiment.merge=refs/heads/experiment
branch.pu.remote=klas
branch.pu.merge=refs/heads/pu
> git --version
git version 1.8.1.msysgit.1
Run Code Online (Sandbox Code Playgroud)

Ric*_*sen 4

这似乎是 Git 1.8.1 中的一个错误。

浏览 Git 源代码(特别是remote.cbuiltin/remote.c),“为‘git Push’配置的本地引用”下的列表计算如下:

  1. 收集配置的推送参考规范:
    • 读取.git/remotes/<remotename>(过时的配置文件;请参阅git help repository-layout
    • 读取.git/branches/<branchname>(另一个过时的配置文件)
    • 检查remote.<remotename>.push配置项
  2. 如果步骤 #1 没有找到任何内容,则用作:唯一的推送 refspec
  3. 查找与收集的推送引用规范匹配的所有{本地,远程}分支组合

请注意,上述算法不关注branch.<branchname>.remotebranch.<branchname>.mergepush.default

在典型的使用模式下,上述算法中的步骤 #1 将永远不会找到任何配置的 refspec,因此:将被使用。该 refspec 是一个简单的匹配 refspec,因此在典型用法中,如果本地和远程存储库中都有指定的分支,则git remote show <remotename>始终会打印。<branchname> pushes to <branchname><branchname>