【问题标题】:Git remote branches missing when cloning via http, but available when cloning locally in the remote machine通过 http 克隆时缺少 Git 远程分支,但在远程机器中本地克隆时可用
【发布时间】:2012-05-17 08:51:11
【问题描述】:

我被这个困扰了很长时间。我很确定这是从 svn 迁移时出现的错误。

在裸仓库所在的服务器中:

$ git clone /var/git/queryj.git
$ cd queryj
$ git branch -r

origin/HEAD -> origin/remotes/trunk
origin/br-0_6--ventura24-2_0-5
origin/master
origin/remotes/br-0_6--ventura24-1_0
origin/remotes/br-0_6--ventura24-1_9-stable
origin/remotes/br-0_6--ventura24-1_9-synchr
origin/remotes/br-0_6--ventura24-2_0
origin/remotes/br-0_6--ventura24-2_0-0

通过 https 克隆存储库时,我得到不同的结果:

$ git clone https://git.acm-sl.org/queryj.git
$ cd queryj
$ git branch -r

origin/HEAD -> origin/remotes/trunk
origin/br-0_6--ventura24-2_0-5
origin/remotes/trunk
origin/ventura24-2_0-stable

知道如何在通过 https 克隆时使丢失的分支可用吗?它是通过 webdav 导出的。

【问题讨论】:

标签: git branch git-branch git-remote


【解决方案1】:

默认情况下,git clone 不会为所有 remote tracking branches 创建本地分支。

在列出 Git 对象时不要忘记 git for-each-ref--format 选项实际上可以是一个完整的脚本

例如,使用上游分支创建本地分支(尚不存在的本地分支)到给定远程(也使用“Is there a better way to find out if a local git branch exists?”):

#!/bin/bash

aremote=$1
fmt='r=%(refname); T=$(r#refs/remotes/$aremote/}
if [[ "$T" != HEAD ]]; then
  git show-ref --verify --quiet refs/heads/$T
  res=$?
  if [[ "$res" != "0" ]] ; then git branch --set-upstream $T $aremote/$T ; fi
fi
'
e=`git for-each-ref --shell --format="$fmt" refs/remotes/$aremote`
eval "e"

您可以将该脚本与您的遥控器名称一起用作参数。

【讨论】:

    【解决方案2】:

    通过 HTTP 克隆(不使用智能服务器)会使用一些从存储库的其余部分生成的额外元数据。此元数据需要手动更新,您可以通过运行git update-server-info 来完成。

    【讨论】:

      猜你喜欢
      • 2016-05-02
      • 2012-10-07
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多