====== submodules ====== git submodules are entire projects that are incorporated into another project. These submodules maintain their own version history. The most important point to understand is that when working with a submodule, you are only doing the following: - telling the master project what to call the submodule (a directory name) - telling the master project where to pull this submodule project from (a repo location) - telling the master project which SHA-1 hash (revision number) of this submodule will be used in the master project ===== adding a submodule ===== git submodule add /path/to/submodule.git path/for/submodule/in/your/project (adds a folder for the submodule, and creates .gitmodules at the root of your project) git submodule init (adds the submodule reference info from .gitmodules to your .git/config) git submodule update (checks out the submodule) ===== removing a submodule ===== - Delete the relevant line from the .gitmodules file. - Delete the relevant section from .git/config. - Run git rm --cached path_to_submodule (no trailing slash). - Commit and delete the now untracked submodule files. Source: http://stackoverflow.com/questions/1260748/how-do-i-remove-a-git-submodule ===== cloning a project that has submodules ===== The easiest way to clone a project with submodules is to use the %%--recursive%% flag, which initializes and checks out all submodules. git clone --recursive /path/to/repo.git or git clone --recursive /path/to/repo.git myproject