git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Scripts to use "bundles" for moving data between repositories

From
Mark Levedahl <mdl123@verizon.net>
Date
Feb 14, 2007, 14:10 UTC
Message-ID
<11714622292110-git-send-email-mdl123@verizon.net>

I am working a project using git where we have many repositories on machines that can never be directly connected, but which need to have the same objects and development history. Existing git protocols offer limited support: we can either a) publish and apply patch files branch by branch, or b) copy an entire repository from one machine to another and then do local push or fetch. While both are workable, neither is a completely satisfactory solution, so I wrote the attached scripts that support a "bundle" transfer mechanism. A bundle is a zip archive having two files: a list of references as given by git-show-ref and a pack file of objects from git-pack-objects. git-bundle creates the bundle, git-unbundle unpacks and applies at the receiving end. The means of transporting the bundle file between the machines is arbitrary (sneaker net, email, etc all can work).

This transfer protocol leaves it to the user to assure that the objects in the bundle are sufficient to update the target machine. This is a direct consequence of the prohibition on direct communication between the machines. The approach supported here is to use normal git-rev-list format to specify what to include, e.g. master~10..master, or ^master pu next, etc. Having too many objects in the pack file is fine: git-unpack-objects at the receiving end happily ignores things not needed. git-unbundle normally checks that the updated references are fast-forward (--force to override), and that all required objects exist (--shallow to override). This latter option supports a disconnected shallow clone.

I offer this for inclusion in the main distribution, comments and suggestions for improvement are welcome regardless. The scripts are working for me today and I find them very useful.

Mark Levedahl
Next: Mark Levedahl
Message 1 of 32 in “Scripts to use "bundles" for moving data between repositories”
  1. Mark LevedahlFeb 14, 2007
  2. git-bundle - bundle objects and references for disconnected transfer.Mark Levedahl, Feb 14, 2007
  3. git-unbundle - unbundle objects and references for disconnected transfer.Mark Levedahl, Feb 14, 2007
  4. Create a man page for git-bundle.Mark Levedahl, Feb 14, 2007
  5. Create a man page for git-unbundle.Mark Levedahl, Feb 14, 2007
  6. Shawn O. PearceFeb 14, 2007
  7. Mark LevedahlFeb 14, 2007
  8. Shawn O. PearceFeb 14, 2007
  9. Mark LevedahlFeb 14, 2007
  10. Nicolas PitreFeb 14, 2007
  11. Shawn O. PearceFeb 14, 2007
  12. Johannes SchindelinFeb 14, 2007
  13. Mark LevedahlFeb 14, 2007
  14. Mark LevedahlFeb 14, 2007
  15. Johannes SchindelinFeb 15, 2007
  16. Mark LevedahlFeb 15, 2007
  17. Johannes SchindelinFeb 15, 2007
  18. Johannes SchindelinFeb 15, 2007
  19. Mark LevedahlFeb 15, 2007
  20. Johannes SchindelinFeb 15, 2007
  21. Mark LevedahlFeb 16, 2007
  22. Johannes SchindelinFeb 16, 2007
  23. Mark LevedahlFeb 16, 2007
  24. Matthieu MoyFeb 14, 2007
  25. Mark LevedahlFeb 14, 2007
  26. Johannes SchindelinFeb 14, 2007
  27. Junio C HamanoFeb 14, 2007
  28. Mark LevedahlFeb 14, 2007
  29. Junio C HamanoFeb 14, 2007
  30. Mark LevedahlFeb 14, 2007
  31. Junio C HamanoFeb 14, 2007
  32. Junio C HamanoFeb 14, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.