A Few git configuration

git config --local diff.submodule log
git config --local alias.spush 'push --recurse-submodules=on-demand'
git config --local status.submoduleSummary true  // Very good.
git config --local diff.submodule log  // Alternative git diff --submodule=log
git --recurse-submodules [git-repo-url] // Clone
git submodule add [] [name] // Add new subrepo
git submodule update --remote --recursive

After working on it

// fetch all new updates in submodule
git submodule update --remote 

// add all submodules changes
git add .

// commit new pointers
git commit -m “Update submodule pointers”

// publish the changes
git push origin master

// Shortcut
git submodule update --remote --merge // Didnt work
git submodule update — init — recursive //in order to auto-init any new submodule, 
//and to recursively update these if need be

// Alias
git config --local alias.spull '!git pull && git submodule sync --recursive && git submodule update --init --recursive'
// Alternative alias
git config --global alias.spull '__git_spull() { git pull "$@" && git submodule sync --recursive && git submodule update --init --recursive; }; __git_spull'

// Pull and update recursively. 
git config --global alias.update '!git pull && git submodule update --init --recursive'