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