Is it possible to download all commits but not the files themselves? I want to run bisect but download the versions from the build server instead of compiling myself.
            Asked
            
        
        
            Active
            
        
            Viewed 6,734 times
        
    4
            
            
        - 
                    1Do you mean to get the .git file only? – ignacio Dec 11 '19 at 04:56
- 
                    @ignacio Even more — only commits without trees and blobs. – phd Dec 11 '19 at 12:47
- 
                    1Food for thought and experiments: you can try to use `git clone --filter=blob:none` but for this you need the very latest client and the very latest server that supports Git Protocol version v2. Further reading: https://stackoverflow.com/a/48852630/7976758, https://stackoverflow.com/a/52916879/7976758, https://stackoverflow.com/a/57896644/7976758 – phd Dec 11 '19 at 12:50
- 
                    Also my advice is to estimate the number of commits you need to run `git bisect` and use `git clone --depth` to avoid cloning the entire repository. Combine that with `--bare` or `--no-checkout`. – phd Dec 11 '19 at 12:52
1 Answers
12
            When you run git bisect you can supply --no-checkout as argument if you do not want to checkout a new working tree for each iteration.
Same goes for git clone --no-checkout to avoid a working tree based on HEAD after the clone.
You can run git bisect run my_script <arguments> having my_script do whatever you want after each checkout.
In summary:
git clone <repo> --no-checkout
git bisect --no-checkout run my_script arguments
EDIT:
As per the suggestion of @phd, since recent versions (v2.2x) of git, "partial clones" are now supported meaning you can supply a clone "filter".
In your case we'll use --filter=blob:none and --filter=tree:0 and only retain commit-objects, but it requires the server to have a version of git installed that understands the filter or you'll get a warning:
warning: filtering not recognized by server, ignoring
The clone command you'll want to use:
git clone <repo> --filter=blob:none --filter=tree:0 --no-checkout
 
    
    
        zrrbite
        
- 1,180
- 10
- 22
- 
                    2That stops git creating the files on the working dir, but clone still downloads them to .git/objects – Bruno Martinez Dec 11 '19 at 03:25
- 
                    That's what he asked for, was my interpretation. "Download all the commits but not the files". He'll have the history but not the current working tree. – zrrbite Dec 11 '19 at 05:08
- 
                    You cannot run git bisect (or git anything) without a .git/ folder (except ofcourse the obvious ones like git init, git clone, etc) – zrrbite Dec 11 '19 at 07:55
- 
                    
- 
                    
