Google repo tool (главная ветка) не синхронизируется с локальным зеркалом в Windows - PullRequest
0 голосов
/ 30 ноября 2018

Недавно мастер ветка для инструмента репо Google была обновлена ​​для поддержки ОС Windows.Из журналов коммитов ясно: https://gerrit.googlesource.com/git-repo/+log

Я могу запускать базовые команды, такие как repo init и repo sync, используя инструмент репо в Windows (который использует MinGW Git в Windows).В моей работе мне нужно создать локальное зеркало репозитория, а затем использовать его.Утилита repo прекрасно работает для создания зеркального хранилища.

Вот команды, используемые для создания зеркального хранилища на локальном диске в ОС Windows.

$ repo.cmd init -u <URL> -b <branch_name> -m <manifest_file_name> --mirror --no-repo-verify

$ repo.cmd sync --no-tags
  • - no-repo-verify isиспользуется для принудительного использования главной ветви инструмента репо.
  • Приведенные выше команды создают зеркало на локальном диске C: \ git-repo \ test \ mirror-testing \ mirror

Но когдаЯ отсылаю вышеупомянутое зеркало для синхронизации на другом диске, тогда оно показывает ошибку.

Command:
$ repo.cmd init -u <URL> -b <Branch_name> -m <manifest_file_name> --reference="C:\git-repo\test\mirror-testing\mirror" --no-repo-verify

Error:
error: object directory C:/git-repo/test/mirror-testing/mirror/project/manifest.git/objects? does not exist; check .git/objects/info/alternates.

Приведенная выше команда создает альтернативный файл в C: / git-repo / test / mirror-testing / mirror / project / manifest.git / objects / info / directory, и этот файл содержит следующий путь:

C:\git-repo\test\mirror-testing\mirror\project/manifest.git\objects

Я пробовал другие форматы для предоставления ссылочного значения:

Git format: "/C/git-repo/test/mirror-testing/mirror"
Cygwin format: "/cygdrive/c/git-repo/test/mirror-testing/mirror"

Использование вышеуказанных форматов в ссылках не создаетфайл альтернатив в каталоге объектов.

время инициализации репо во всех вышеперечисленных случаях просто предполагает, что зеркало не передается, а инициализация выполняется из сети.

Когда я повторяю тот же тест с Cygwin Git + Google repo tool (стабильная ветвь), то я не вижу никаких ошибок, и время инициализации репо и время синхронизации очень меньше по сравнению с временем инициализации и синхронизацией зеркала, котороепросто предлагает использовать зеркало.

  • repo.cmd - это пакетный файл-обертка для запуска инструмента репозитория с python.Файл repo.cmd содержит одну строку

    @ call python% ~ dp0 \ repo% *

  • Я использую терминал Cygwin в Windows 7 для запуска этих команд.

  • Для ясности, инициация репозитория и синхронизация репозитория показывают ошибку при обращении к зеркалу, но успешно завершаются при синхронизации из внешней сети.Проблема в том, что зеркало не упоминается.

Кто-нибудь использовал Google репо в Windows для создания зеркала и синхронизации на другом диске, используя в качестве ссылки?

1 Ответ

0 голосов
/ 13 декабря 2018

Я протестировал основную ветку инструмента репо Google с MinGW Git в Windows 7 и Windows 10. Работа репозитория и синхронизация репо в обеих ОС.

Даже создание локального зеркала с помощью --mirror работает, носсылка на то, что локальное зеркало для синхронизации на другом диске не работает, и отображает ошибку: «каталог объекта не найден».

Чтобы быть понятным, использование --reference с локальным зеркалом показывает ошибку, но в конечном итоге использует сеть и игнорируетместное зеркало.В конечном итоге команда завершается успешно, но не использует локальное зеркало.Пока я не вижу обходного пути для этого в Windows.

Между тем Windows 10 изначально поддерживает Linux bash без использования виртуальной машины.WSL, подсистема Windows для Linux, является бесплатной опциональной функцией Windows 10, которая позволяет программам Linux работать в Windows.Он предоставляет вам версию оболочки bash для Windows и уровень совместимости, который позволяет многим программам Linux работать на вашем компьютере с Windows.Используя эту опцию, вы можете заменить Cygwin Git на Linux Git.

Я протестировал инструмент репо на Linux Bash (с установленным дистрибутивом Ubuntu) для команд репозитория init, sync, mirror и reference, и он работает.На самом деле мы используем Linux bash, поэтому просто работает стабильная ветка Goole repo, вам не нужно использовать основную ветку, чтобы она работала.

...