2010-09-25 3 views
2

Я отслеживаю проект, который недавно перешел из svn в git. У меня самый последний svn-код и я хочу начать использовать код из git. Есть ли способ сделать это, что не требует повторной загрузки довольно большой базы кода по медленному соединению? По сути, я хочу сказать: «Начните отсюда (старый код svn) и просто получите изменения от git».Отслеживание большого проекта, который переключился с svn на git

ответ

1

SVN & Git может показаться похожим, потому что они оба являются инструментами SCM, но под капотом они реализованы очень разными, то есть Git is way better.

Просто начните с свежего и git-клонирования. Даже для крупных проектов, таких как ядро ​​Linux, Git очень быстро клонирует.

Вы также можете использовать опцию --depth, чтобы ускорить процесс:

--depth < глубина >
Создать неглубокую клон с историей усечен до указанного количества изменений. Неглубокий репозиторий имеет количество ограничений (вы не можете клонировать или извлекать из его, а также не нажимать и не вводить его), но достаточно, если вы интересуетесь только недавней историей большого проекта с длинной историей, и хотел бы отправить исправления в качестве патчей.

Источник: http://git-scm.com/docs/git-clone

Вот пример, который проверяет самую последнюю версию репозитория:

git clone git://source.winehq.org/git/wine.git ~/wine-git --depth 1 

Источник: http://mortalpowers.com/news/speed-up-git-clone-with-shallow-clones

Вы можете позже использовать --depth вариант с git pull:

--depth = < глубины >
Углубление истории репозитория неглубоко созданного мерзавца клона с --depth = < глубины > варианта по указанному номеру фиксаций.

Источник: http://kernel.org/pub/software/scm/git/docs/git-pull.html

Может быть, если вы поставите достаточно большое количество (? Или, может быть, -1) на глубину так, чтобы потянуть за всю историю репозитория, то вы будете иметь все функциональность обычного репозитория, например, способность клонировать или извлекать из него или нажимать на него или в него.

Если нет, вы можете просто клонировать его в отдельном месте (возможно, когда у вас есть более быстрое соединение) и используйте git format-patch и git apply, чтобы переместить свои коммиты из неглубокого хранилища в новый.

Мэтт

1

Я думаю, что вам нужно клонировать проект в любом случае

0

Вы можете сэкономить время, заранее высева репозиторий Git с тем, что у вас есть уже - вы, вероятно, все равно придется скачать довольно много (и я не уверен, насколько он умрет при разработке минимального необходимого), но это может помочь.

Если вы создадите новый репозиторий git и добавите к нему свою проверку subversion, этот репозиторий должен иметь много объектов, которые в противном случае были бы загружены. Затем можно клонировать в восходящем репозиторий с использованием нового хранилища в качестве ссылки:

git clone --reference /local/reference/repo git://remote/upstream/repo 

Обратите внимание, что новый клонированный репо будет зависеть от существования Вашего взломан один для объектов; вы можете обойти это путем повторного клонирования локального репозитория.

+0

Этот вариант не предполагает, что '/ local/reference/repo' является git repo тоже? – fuz

+0

Да, это репо, которое вы только что создали, проверив содержимое вашей проверки subversion. –

1

Проблема в этом случае заключается в том, что git не только сохраняет последнюю версию, но и всю историю программы (все фиксации, теги, ветки, что угодно), поэтому вы можете легко переключаться между разными оборотами. Таким образом, последняя проверка не сохраняется нигде - она ​​просто создается из данных.

Но если вы хотите сохранить полосу пропускания, AFAIK есть возможность просто загрузить все объекты, начинающиеся с заданной даты, просто пойдите в Google или найдите SO, чтобы узнать имя (я его забыл). Очевидным недостатком этого является то, что любая история до этого момента недоступна. Но для простого отслеживания этого может быть достаточно.

+0

Theres также экспериментальное ленивое клонирование в списке рассылки. – alternative

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