Можно ли сделать так, чтобы Git знал о существующем файле .gitmodules? - PullRequest
14 голосов
/ 03 октября 2011

Я добавил подмодуль:

git submodule add git://github.com/chneukirchen/rack.git rack

Файл .gitmodules был создан как:

[submodule "rack"]
path = rack
url = git://github.com/chneukirchen/rack.git

И, конечно, Git знает об этом:

git submodule status
30fb044db6ba5ea874ebc44a43bbd80a42676405 rack (1.3.0-64-g30fb044)

Я добавил подмодуль вручную, например, добавив в этот файл:

[submodule "redcloth"]
path = plugins/redcloth
url = git://github.com/jgarber/redcloth.git

И я повторил предыдущую команду:

git submodule init
Submodule 'rack' () registered for path 'rack'

git submodule update
(no output)

git submodule status
30fb044db6ba5ea874ebc44a43bbd80a42676405 rack (1.3.0-64-g30fb044)

Итак, насколько я вижу, то, что я добавил вручную, игнорируется. Есть ли какой-нибудь способ сообщить Git о строках, добавленных вручную в файл .gitmodules?

Примечание. Я также пытался вручную добавить строки в файл .git/config, но это тоже не сработало.

Ответы [ 2 ]

17 голосов
/ 05 октября 2011

Хорошо, так что благодаря Адаму я нашел ответ, это было довольно очевидно, но, тем не менее, вот оно:

Если вы проверите, что делает git submodule add, вы заметите, что он делает три вещи:

  1. Добавляет строки в файл .gitmodules,
  2. клонирует репо по «пути», который вы определили в команде, и
  3. Добавляет модуль в файл .git/config.

Таким образом, по сути, единственное различие между репо с субмодулем, добавленным вручную, и субмодулем, добавленным с помощью команды git submodule, заключается в содержимом самого репо.

Отвечая тем же примером, вы должны:

$ git clone git://github.com/jgarber/redcloth.git plugins/redcloth

Добавить следующее в .git/config файл *:

[submodule "redcloth"]
url = git://github.com/jgarber/redcloth.git

Убедитесь, что вы хотя бы добавили их в репозиторий git:

$ git add plugins/redcloth

А затем проверьте, действительно ли git "знает":

$ git submodule status
0766810ab46f1ed12817c48746e867775609bde8 plugins/redcloth (v4.2.8)
30fb044db6ba5ea874ebc44a43bbd80a42676405 rack (1.3.0-64-g30fb044)

* обратите внимание, что переменная "path", которую вы используете в файле .gitmodules, не требуется в этом файле

4 голосов
/ 03 октября 2011

Вам нужно запустить

git submodule update --init --recursive 

ОБНОВЛЕНИЕ:

Команда добавления субмодуля фактически клонирует весь репозиторий и добавляет sha1 в индекс.

Это может бытьновое поведение по сравнению с предыдущими версиями git, клонирование не было выполнено немедленно.

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

Надеюсь, это поможет.

...