user1671010
user1671010

Reputation: 335

Pick only subset of folders when using Git clone

Is there a way to clone only subset of the original branch in git?

E.g.

I have following folders structure:

A
|_ B
|_ C
|_ D

And after clone I want to have:

A
|_ C
|_ D

I want to use this flow for deploying my application:

Any advice?

Upvotes: 18

Views: 8901

Answers (3)

Sebastian Cichosz
Sebastian Cichosz

Reputation: 909

Here's a modern approach to git sparse checkout

git clone --no-checkout <REPOSITORY> <DIR>
cd <DIR>
git sparse-checkout init --cone  # checkout root dir files (build, etc.)
git sparse-checkout set <SUBDIR1> [<SUBDIR2> ...] # subdir list to include
git checkout

See git documentation and GitHub blog post.

Upvotes: 3

Avec
Avec

Reputation: 1761

What you want is possible since Git 1.7 with what is called sparse-checkout.

A good explanation is found here.

Upvotes: 25

Adam Dymitruk
Adam Dymitruk

Reputation: 129526

As the comment suggests, you can't clone part of a path. If you are used to different source control paradigms such as the one used by subversion, this may seem unintuitive at first. The reason you can't do it is because git stores snapshots of the whole tree. So you can get a shallow clone, meaning you get only recent history up to a point. This is more like a horizontal slice or cut-off, rather than the vertical one you are after.

The best way to get what you want is to use submodules. If you already have everything in one repository, you would have to either start fresh with this paradigm or tease apart the repository into multiple repositories with filter-branch. This would also be tricky as you would end up with empty commits in all repos and if get rid of those, you would have some tricky follow up filter branching to tie the proper commits in the submodule to the parent repository.

Take a look at the chapter on submodules at http://git-scm.com/book.

Upvotes: 1

Related Questions