2012-05-08 3 views
4

Я долгое время задерживался с этим. Я почти уверен, что это произошло из-за ошибки при переходе с svn.Git удаленные ветви пропадают при клонировании через http, но доступны при клонировании локально в удаленной машине

На сервере, где находится голое хранилище:

$ 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

После прочтения [this] (http://stackoverflow.com/questions/4012613/how-do-list-and-fetch-remote-branches-after-svn-to-git-migration) исправление просто: на сервере: мерзавец клон /var/git/queryj.git для дистанционного управления в $ (мерзавец филиал -r); git checkout -b $ remote $ remote; done git push --mirror Новый клон на моей локальной машине теперь видит ожидаемые отдаленные ветви. В заключение. – chous

+0

Возможный дубликат [Git не клонирует все ветви на последующих клонах?] (Http://stackoverflow.com/q/5563349/456814). –

+0

Возможный дубликат [Перенос репозитория SVN с историей в новый репозиторий Git] (http://stackoverflow.com/questions/79165/migrate-svn-repository-with-history-to-a-new-git-repository). –

ответ

1

A git clone по умолчанию не создает локальные ветви для всех remote tracking branches.

Не забывайте git for-each-ref при перечислении объектов Git. --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" 

Вы могли бы использовать этот сценарий с именем вашего пульта в качестве параметра.

0

Клонирование по HTTP (без использования интеллектуального сервера) использует некоторые дополнительные метаданные, которые генерируются из остальной части репозитория. Эти метаданные необходимо обновить вручную, что вы можете сделать, запустив git update-server-info.

Смежные вопросы