Судя только по количеству результатов для "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
, но что, если я не могу / это дорого (например, это удаленно, и у меня нет доступа в интернет / это медленно).
Лучший обходной путь, который я нашел, - это клонировать все подмодули, которые мне нужны, в совершенно отдельное место, а затем подмодуль из моих локальных клонов; это сохраняет дешевизну подмодулей. Конечно, это добавляет еще один уровень сложности, когда вы работаете в команде. : /