How to extract a git subdirectory and make a submodule out of it?

Question:

I started a project some months ago and stored everything within a main directory.
In my main directory “Project” there are several subdirectories containing different things:
Project/paper contains a document written in LaTeX
Project/sourcecode/RailsApp contains my rails app.

“Project” is GITified and there have been a lot of commits in both “paper” and “RailsApp” directory. Now, as I’d like to use cruisecontrol.rb for my “RailsApp” I wonder if there is a way to make a submodule out of “RailsApp” without losing the history.

Answer:

Nowadays there’s a much easier way to do it than manually using git filter-branch: git subtree

Installation

NOTE git-subtree is now part of git (if you install contrib) as of 1.7.11, so you might already have it installed. You may check by executing git subtree.


To install git-subtree from source (for older versions of git):

Or if you want the man pages and all

Usage

Split a larger into smaller chunks:

For detailed documentation (man page), please read git-subtree.txt.

Leave a Reply