Export git with version history

Issue

I need to export a git repository content and import it in a target repository. I know of two alternatives to do it, but they do not solve my problem

a) Add the source repository as a remote and do a merge to the target. I cannot use this as both repositories are not on the same network

b) Use git archive and copy the contents to the target. In this git archive the revision info is lost.

I need something that does an archive along with the version history and enables me to merge in the target. How can this be done?

Solution

git bundle is provided for this exact purpose.

Example:

  1. Bundle your source repository in its entirety

    git bundle create my_repo.bundle --all

  2. Take “my_repo.bundle” to where your target is

  3. From your target, load up your source commit objects

    git bundle unbundle my_repo.bundle

    …from which point you can merge/rebase/cherry-pick your desired source commits into your target repository to your heart’s content.

    Otherwise, pulling works just the same:

    git pull my_repo.bundle

Compared to cloning, bundles are easier to transfer because they’re smaller as your files aren’t carried in their checked out state.

Other reasons for using bundle:

  • Unlike using clone --bare (which doesn’t checkout your files),
    bundles are created and packed as a single file so you don’t need
    additional compressing/tarballing.

  • You could also simply tarball your source repository (or just the
    .git directory), but you’ll be carrying over all the excess cache and
    garbage that builds up under .git/.

Answered By – antak

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published