Возможно ли в git выдвинуть субмодуль, определенный как относительный путь к голому? - PullRequest
1 голос
/ 07 февраля 2012

У меня есть такой сценарий:

  1. Я создал Git-репозиторий.

    $ git init

  2. Клонировал внешнийхранилище в подкаталоге.(используя git-hg в моем случае)

    $ git hg clone lib remote_uri

  3. Добавил клонированную библиотеку в качестве подмодуля

    $ git submodule addlib ./lib

  4. Затем я зафиксировал изменения

    $ git commit -am "добавил lib"

После этогопроцедура, если я git clone этот репо и git submodule init/update новый, я получаю репо и библиотеку.

В любом случае, если я пытаюсь подтолкнуть репо к голому, и клонировать с гологов другое место, новый сбой, пытаясь получить lib.Я пытался набрать git submodule init в чистом виде, но команда не работает, если у вас нет рабочей копии.

Кто-то понял, что можно сделать?

**Обновление ** Вот пример без hg.

This is a way to reproduce it.
/tmp$ git clone https://github.com/gitster/git.git
/tmp$ cd git/
/tmp/git [master]$ git clone https://github.com/gitster/git.git gitrepo
/tmp/git [master]$ git submodule add ./gitrepo
/tmp/git [master]$ git commit -am "added repo"
/tmp$ cd ..
/tmp$ git clone --bare git  gitbare
/tmp$ git clone  gitbare gittest
/tmp$ cd gittest/
/tmp/gittest [master]$ git submodule init
Submodule 'gitrepo' (/tmp/gitbare/gitrepo) registered for path 'gitrepo'
/tmp/gittest [master]$ git submodule update
fatal: repository '/tmp/gitbare/gitrepo' does not exist
Clone of '/tmp/gitbare/gitrepo' into submodule path 'gitrepo' failed

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Вы, кажется, ожидаете невозможного.Подмодули сами по себе являются репозиториями, и, чтобы иметь возможность клонировать их из любого места, для них должен быть доступный репозиторий, как и для родительского репозитория.Вы добавили субмодуль без общедоступной конфигурации URL.Git не сможет волшебным образом извлечь его из версии, которую вы вставили в исходный репозиторий.

Вам нужно обновить URL-адрес для субмодуля, чтобы он был доступен из любой точки мираклонировать его из.Вы должны размещать его так же, как и свой родительский репозиторий, будь то на одном компьютере, в одной сети или на GitHub.

И, кстати, ваши инструкции по воспроизведению не совпадают с вашим фактическим вариантом использования.В случае с игрушкой, которую вы разместили, все, что вам нужно сделать, это правильно добавить подмодуль, используя публичный URL:

git submodule add https://github.com/gitster/git.git gitrepo

, и все будет работать нормально.Если вы размещаете то, что пытаетесь добавить как подмодуль подобным образом, то подходящая версия этой команды будет работать для вас.

0 голосов
/ 07 февраля 2012

Установите URL-адрес для субмодуля, чтобы указать, где существует субмодуль репо. После этого не вызывайте субмодуль init, поскольку он сбрасывает его в место, где его нет.

...