I figured this out in a Gist in 2016 which has attracted a bunch of comments over the years. Now I'm upgrading it to a retroactive TIL.
Run this in the repository folder:
git archive --format=tar.gz -o /tmp/my-repo.tar.gz --prefix=my-repo/ main
This will write out a file to /tmp/my-repo.tar.gz
.
When you tar -xzvf my-repo.tar.gz
that file it will output a my-repo/
directory with just the files - not the .git
folder - from your repository.
You can use a commit hash or tag or branch name instead of main
to create an archive of a different point in that repository.
Without the --prefix
option you'll get a .tar.gz
file which, when compressed, writes a bunch of stuff to your current directory. This usually isn't what you want!
Here's a version that picks up the name of the directory you run it in:
git archive --format=tar.gz -o $(basename $PWD).tar.gz --prefix=$(basename $PWD)/ main
Note the trailing /
on --prefix
- without this you'll get folders called things like datasettetests
.
basename $PWD
gives you the name of your current folder.
Created 2022-11-15T21:27:25-08:00 · Edit