I have a repo that contains about 20 folders, created when I converted from SVN to Git. Is it possible to checkout a single folder from a Git repository (on Bitbucket)? Or do I have to make each of those folders a separate repo?
            Asked
            
        
        
            Active
            
        
            Viewed 1.2k times
        
    2
            
            
        - 
                    The answer is: yes. Unless you like to jump through (many) hoops, adn still end up with a limited solution – sehe Dec 21 '13 at 22:21
- 
                    1*Yes* to which question? – SpokaneDude Dec 21 '13 at 22:23
- 
                    2Yes to "Or do I have to make each of those folders a separate repo". There's a reason why you should try to ask a single clear question :) Anyhow, I hope I amused you with an approach that could work in my answer below. – sehe Dec 21 '13 at 22:32
- 
                    or of: http://stackoverflow.com/questions/600079/is-there-any-way-to-clone-a-git-repositorys-sub-directory-only – sleske Dec 21 '13 at 22:42
1 Answers
6
            Edit Sparse checkouts could be basically this but better (see linked questions). Only, my answer takes care to do a shallow clone as well as doing only the sparse checkout.
You could hack it in two (well, roughly) steps:
- checkout a shallow copy - cd /tmp git clone --depth=1 --bare git@myhosted_repo/project.git (cd project.git && git branch master)
- now - setup your working tree (separately) - mkdir /tmp/workdir cd /tmp/workdir git init . # add the shallow clone as a remote git remote add --fetch shallow /tmp/project.git
- the real hack: - # read a subtree from the remote, shallow branch git read-tree --prefix somedir -u shallow/master:testcases/- (assuming your repo has a directory called - testcases)
You'd end up with a working dir containing just the files from testcases/ in a subdirectory called somedir
The upshot:
- It gets only a single revision from the hosted repo. Good(TM)
- It only ever checks out the single subfolder from that revision. Good(TM)
- It's arcane. It will work especially bad if you intend to put somedirin some other repo (subtree merges can be done, but I wouldn't burn my fingers there)
 
    
    
        sehe
        
- 374,641
- 47
- 450
- 633
- 
                    Failing on on git branch master step. Then fetch gives warning: reject refs/remotes/shallow/master because shallow roots are not allowed to be updated. Also, fatal: Not a valid object name shallow/master:testcases... – jrosell Mar 04 '16 at 08:54
- 
                    @jrosell of course, shallow clones have limitations. If you look at the question, you see an example of a situation where shallow clones could be useful. Yours is not. You can unshallow your clone: `git fetch --unshallow origin` in your cloned repo – sehe Mar 04 '16 at 09:34
