Со временем у меня собралось много игрового кода, который используется во множестве игр. Что бы не заниматься копипастом из проекта в проект, мучительно вспоминая, где же более «свежая» версия (т.к. дата не является признаком самой свеже реализации), я вынес все нужное во внешние модули. Процесс переноса кода во внешние модули длится до сих пор, т.к. появляются новые решения, которым самое место в отдельном модуле.

И вот обновление модулей в проекте у меня выглядело как-то так:

$ cd third-party/module_1 ; git pull ; cd -
$ cd third-party/module_2 ; git pull ; cd -
$ # ...
$ cd third-party/module_n ; git pull ; cd -

Что порой очень утомляло. В итоге лень победила и я открыл для себя новую команду:

$ git submodule foreach git pull origin master