通过http克隆时Git远程分支丢失,但在远程计算机本地克隆时可用

时间:2012-05-08 20:24:14

标签: git branch git-branch git-remote

我被困了很长时间。我很确定它是从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导出。

2 个答案:

答案 0 :(得分: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"

您可以将该脚本与远程名称一起用作参数。

答案 1 :(得分:0)

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

来执行此操作