From: Justin Tobler Date: Wed, 04 Dec 2024 23:19:53 GMT Subject: Re: Some feedback on 'git clone create' Message-ID: In-Reply-To: On 24/12/04 05:28AM, Sainan wrote: > Hi, I hope this email finds you well. > > I think Git bundles/packfiles are an exceptional compression format, but I find there are some rough edges with the tool to create them: > > 1. There is no way to specify that you want a shallow bundle, instead you are only able to a) pack the entire tree at a given head or b) pack new/updated objects in a specified range. Anecdotally, this could store data in ~67% of the size of an equivalent .zip file. You can create an incremental bundle covering a specified range. Something like the following example might help you achieve what you are looking for: $ git bundle create inc.bundle main~10..main > > 2. It seems that when specifiying a commit hash, it raises an error: > $ git bundle create repo.bundle $(git rev-list HEAD | head -n 1) > > fatal: Refusing to create empty bundle. > This confuses me slightly because I thought a commit hash should also be a valid head _pointer_. 'git rev-list' also seems to agree with me on this. A bundle is essentially a pack file with a header indicating the references contained within the bundle. If no reference is provided, the bundle is considered empty and git refuses to create it. I think this makes sense in the context of unbundling as you probably would not want to add new objects without updating references in the target repository. From the git-bundle(1) docs for "create", the usage does say it accepts which may be a bit misleading because git-rev-list(1) does consider the commit hash as valid. Maybe that should be updated to indicate that proper references are expected. -Justin