Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I export a specific commit with git-archive?

Tags:

I asked a similar question before, but it was answered inadequately so I thought I would ask again here but providing more information. I need to get different and older versions of a git repository and I'm having trouble with that. What I've tried is

git checkout master~X   git archive --format zip --output /full/path/to/zipfile.zip master   git checkout master    git checkout master~Y   git archive --format zip --output /full/path/toDifferent/zipfile.zip master   git checkout master  

After unzipping both, they end up being exactly the same. I can't figure out why or how to fix it.

like image 563
SSEMember Avatar asked Jun 13 '12 15:06

SSEMember


2 Answers

The Problem

In both your examples, you are exporting the tip of master. Take out your flags and arguments, and you have:

git archive master 

In other words, you're explicitly doing this to yourself by specifying whatever is stored in .git/refs/heads/master as your tree-ish.

The Solution

You need to provide a tree-ish in accordance with gitrevisions(7) if you want to export a different commit. For example, to export commit 29435bc, you could specify:

git archive --format zip --output /full/path/to/zipfile.zip 29435bc 
like image 60
Todd A. Jacobs Avatar answered Sep 29 '22 11:09

Todd A. Jacobs


Resolution

This is an expected behaviour for the newest versions of Git. Remote Git repositories do not allow clients to access arbitrary SHA1s. The requested objects should be accessed by a ref (i.e. file name).

git-upload-archive-archiver-died-with-error

like image 24
zheng li Avatar answered Sep 29 '22 09:09

zheng li