December 4, 2014

How to Use Git Bundle and Git Archive

Git at Scale
Version Control

Git bundle and Git archive commands aren’t broadly known, but they can serve a variety of purposes.

What Is Git Bundle?

Git bundle is a command that converts your full repository into a single file. Using Git bundle can improve your workflow.

What Is Git Archive?

Git archive is a command that creates an archive of files from a named tree. Using Git archive can be a useful way to exprot your repository.

Git Bundle vs. Git Archive

Both Git bundle and Git archive provide the means to output portions of a repository:

Git archive sends only the specified file contents to the standard output.

Git bundle creates a single file containing both file contents and history.

The Biggest Difference Between Them

The difference between Git bundle and Git archive is whether the contents of the .git folder are included. Git archive excludes the contents of the .git folder, while Git bundle includes it.

From a practical standpoint, the Git bundle and Git archive serve a variety of purposes. They can:

  • Back up just the files in a single sourcetree (e.g., the head revision).
  • Back up the entire repository.
  • Transfer a branch to secure machines that have no network connections.

How to Use Git Archive and Git Bundle

Using Git Archive for Files

The Git archive command archives all the contents of the current HEAD into a file named HeadArchive.zip. Because the prefix option is given, it does this under a folder named “2014-10-21” in the archive. The available list of formats can be retrieved with the git archive --list command. 

For example:

git archive --prefix=2014-10-21/ --format=zip HEAD >HeadArchive.zip

Using Git Bundle for Files and Their History

But the Git archive command includes only the files, not their history. For that, you want the Git bundle command instead. Consider the following example:

git bundle create HeadBundle.git HEAD

That command will create a single file named HeadBundle.git that contains not only the entire file contents of the current HEAD, but it also includes all the history and versioning metadata as well. As such, a bundle serves as a complete copy of the specified data.

Using Git Bundle to Clone a New Repository

You can use Git bundle clone a new repository:

git clone HeadBundle.git ~/test

That command will create a clone of the contents of the bundle in a new test folder. Other options let you verify the contents of a bundle and list the contents.

By establishing a clear convention for tagging, the bundle command even makes it possible to transfer incremental changes regularly at a given time interval. 

Use Git With Perforce

Helix4Git bridges the gap between Git and Perforce Helix Core.

Explore Helix4Git  Compare Git vs. Perforce