Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

  • To make clone faster by taking only part of the repo and ignoring unnecessary development files.
  • I don't want to have some files in production because of security reasons.

Any advice?

like image 790
user1671010 Avatar asked Nov 14 '12 09:11

user1671010


2 Answers

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.

like image 32
Adam Dymitruk Avatar answered Sep 28 '22 17:09

Adam Dymitruk


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

A good explanation is found here.

like image 180
Avec Avatar answered Sep 28 '22 17:09

Avec