Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Export git with version history

Tags:

git

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?

like image 919
codejammer Avatar asked Aug 09 '12 08:08

codejammer


People also ask

Does git archive include history?

The available list of formats can be retrieved with the git archive --list command. But the Git archive command includes only the files, not the history of those files.

Does git clone download all history?

No it does get the full history of the remote repository.


1 Answers

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/.

like image 115
antak Avatar answered Oct 10 '22 13:10

antak