Почему «git submodule» требует каждый раз выборки из удаленного репозитория?

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

Забыв все об обновлении / фиксации / ветвлении подмодулей (что, как я понимаю, сильно усложняет ситуацию), почему подмодули опустошаются каждый раз, когда я меняю ветвь? Насколько я понимаю, это делает ветки дорогими ; что, если я нахожусь в аэропорту и не могу легко / дешево подключиться? Я что-то делаю не так, или есть какая-то философия разработки, о которой я еще не знаю?

Примеры никогда не повредят:

## make a new project
$> git --version
git version 1.7.5.4
$> mkdir new_proj; cd new_proj; git init
$> touch new_file_1.txt; touch new_file_2.txt
$> git add . && git commit -m "first commit"

## move into some development branch
$> git checkout -b cool_feature
$> <hack hack hack>
# in the middle, I add a submodule
$> git submodule add https://github.com/some/other_proj.git other_proj
$> git submodule update --init
$> ls -lR
new_file_1.txt
new_file_2.txt
other_proj
other_proj/that_file
other_proj/another_file

## I have to go back to master to do some work
$> git checkout master
# Why is other_proj still around?
$> git status
Untracked: other_proj
## Fine, I'll remove it, since I want a clean working copy, because I need to do some work and commits
$> git clean -f -d
$> <work work work>

## Now I'm ready to go back to cool_feature, but my submodules are empty!
$> git checkout cool_feature

На этом этапе я должен git submodule update , но что, если я не могу / это дорого (например, удаленно, и у меня нет доступа в Интернет / он медленный).

Лучший обходной путь, который я придумал, - это клонировать все подмодули, которые меня интересуют, в совершенно отдельное место, а затем подмодуль из моих локальных клонов; это сохраняет дешевизну субмодулей. Конечно, это добавляет еще один уровень сложности, когда вы работаете в команде. : /

6
задан Mat 7 January 2012 в 09:32
поделиться