Take the 2-minute tour ×

Here is what I have - a git repo of my code:

       |-proj1 (no git repo here yet)
             |-subproj1 <- current git repo here

Here is what I want - a git repo which is now tracking a new project that uses my code:

       |-proj1 <-git repo moved to here, but still tracking files in subproj1
             |-subproj1 (no git repo here)

I'd like to keep the history intact and therefore the new repository will be referring to files that are one level deeper than the original. What is the most pain free way to do this?

share|improve this question

2 Answers 2

up vote 6 down vote accepted

Rewriting history can be done with the git filter-branch command. In fact, moving a directory tree into a subdirectory is one of the cut&paste-ready examples given in the git filter-branch manpage:

git filter-branch --index-filter '
  git ls-files -s |
  sed "s-\t\"*-&subproj1/-" |
  GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
share|improve this answer
I'm trying to do something similar to this and notice that my temp index file isn't being written to ( gist.github.com/60d14f45a0b2fb98e641 ). Would there be any valid reason why the temp index isn't being written? –  Mark Derricutt Sep 6 '10 at 5:41
The sed command seems flakey; I don't get the expected results. –  mxcl Oct 11 '11 at 16:53
I also had problems with the sed command. The - as separator is unusual and unusable for directories with hyphens in the name. I used: sed "s#\t\"*#&sub-proj1/#" –  Daniel Alder Dec 8 at 10:19

Just create the directory structure you want inside the repo - i.e. move all files and folders to "subproj1" folder.

Then stage all added and deleted files and git will work out that they are in fact renames:

git add .
git add -u .
git commit -m "Moved to a subfolder"
share|improve this answer
That will mean that if I checkout a previous commit, the files will be checked out inside proj1. I don't want that. I want to be able to checkout a previous commit and have the files in subproj1 affected. –  Carl Jun 17 '10 at 2:55

Your Answer


