8

I want to create a new git repository of a folder under an existing git repository. I want the history to be preserved in the new repository. How do I create this new git repository?

senthil
  • 339
  • 3
  • 8

3 Answers3

5

You can clone it, and then apply on the clone a filter-branch in order to split that repository, extracting only the directory you want (with its full history).

See Detach subdirectory into separate Git repository

Note the git clone --no-hardlinks /XYZ /ABC used during the cloning step:

The --no-hardlinks switch makes git use real file copies instead of hardlinking when cloning a local repository.

Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250
2

Assuming you only want to keep the subdirectory as a separate project: you can use git filter-branch for that.

  1. Create a new branch
  2. Define a "tree filter" that rearranges a checked out copy the way you want, ideally as a separate script
  3. Run git filter-branch --tree-filter=/path/to/script thebranch

You now have a separate branch that is not related to the normal development stream, containing just the subdirectory. Whoever clones the new branch gets only the subproject history.

Simon Richter
  • 28,572
  • 1
  • 42
  • 64
  • 1
    You don't need to define a (custom) tree filter here. The built-in subdirectory filter does exactly this, as described in the answer linked to in [VonC's answer](http://stackoverflow.com/questions/5421386/how-do-i-create-a-new-git-repository-from-a-folder-in-an-existing-git-repository/5421581#5421581). You also don't want to do this on a new branch in the same repo, but rather in separate clone. If a repo contained both the subdirectory and full project on separate branches, an initial clone would fetch both, creating remote tracking branches for each. Wasteful! – Cascabel Mar 24 '11 at 15:30
-2

You can clone it and keep the files you want; history will then be preserved.

CharlesB
  • 86,532
  • 28
  • 194
  • 218