4

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

4

2 回答 2

1

A默认git clone不会为所有远程跟踪分支创建本地分支。

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

例如,使用上游分支创建本地分支(尚不存在的本地分支)到给定的远程(也使用“是否有更好的方法来确定本地 git 分支是否存在? ”):

#!/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"

您将使用该脚本与您的远程名称作为参数。

于 2012-06-10T10:02:52.817 回答
0

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

于 2012-06-10T12:15:23.693 回答