2017-05-15

yurikhan: (Default)

Заметка для себя, чтоб не потерять.

Типичная задача: добавить сабмодуль в git-репозиторий.

Решение человека, только что читавшего мануал: $ git submodule add git@host:path/repo.git. Клонирует удалённый репозиторий в подкаталог текущего, регистрирует его в .gitmodules и .git/config.

Как обычно получается у меня: $ git clone git@host:path/repo.git. Клонирует удалённый репозиторий в подкаталог текущего и больше ничего не делает. Обнаруживается это где-то ближе к тому моменту, когда добавление сабмодуля нужно закоммитить.

Соответственно, задача: На входе есть суперпроект (в терминах git-submodule(1)) и внутри него локальная копия репозитория, который нужно сделать сабмодулем. Считаем, что текущий каталог находится внутри суперпроекта, а корень будущего сабмодуля является непосредственным подкаталогом текущего. Решение методом выливания воды из чайника заранее отметаем как неизящное.

Из инструментов у нас есть git submodule add [-b <branch>] <repository> <path>. Ветку указывать нужно в редких случаях и можно руками. Путь легко вводится по M-RET в Midnight Commander’е. А вот URL репозитория хочется достать и подставить автоматически.

Достать путь можно так: $ git -C <submodule> config --get remote.origin.url.

Однако писать $ git submodule add $(<строчка выше>) каждый раз утомительно, поэтому добавляем алиас:

$ git config --global --edit

[alias]
    subinit = !sh -c 'sub="$1" && shift && git submodule add "$@" $(git -C "$sub" config --get remote.origin.url)' -

$ git subinit repo
Adding existing repo at 'repo' to the index

$ git subinit repo2 -b master
Adding existing repo at 'repo' to the index

Profile

yurikhan: (Default)
Yuri Khan

May 2017

S M T W T F S
 123 456
78910 111213
14 151617181920
21 222324252627
28293031   

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2017-05-29 17:02
Powered by Dreamwidth Studios