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

[PATCH] git-unbundle - unbundle objects and references for disconnected transfer.

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

Some workflows require coordinated development between repositories on machines that can never be connected. This utility unpacks a bundle containing objects and associated references (heads or tags) into the current repository, effectively supporting git-push like operations between disconnected systems.

Signed-off-by: Mark Levedahl <mdl123@verizon.net>
---
 git-unbundle |   75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)
 create mode 100755 git-unbundle
diff --git a/git-unbundle b/git-unbundle
new file mode 100755
index 0000000..5ea4ae6
--- /dev/null
+++ b/git-unbundle
@@ -0,0 +1,75 @@
+#!/bin/sh
+# unpack a git-bundle file into current repository
+#
+# See git-bundle.
+
+die() {
+	echo >&2 "$@"
+	exit 1
+}
+
+bfile=bundle.zip
+force=
+shallow=
+while case "$#" in 0) break ;; esac
+do
+	case "$1" in
+	--bare)
+		export GIT_DIR=.;;
+	-f|--f|--fo|--for|--forc|--force)
+		force=1;;
+	-h|--h|--he|--hel|--help)
+		echo "usage: git-unbundle [--bare] [-f|--force] [--shallow] [bundle (default is bundle.zip)]"
+		exit;;
+	-s|--s|--sh|--sha|--shal|--shall|--shallo|--shallow)
+		shallow=1;;
+	-*)
+		die "unknown option: $1";;
+	*)
+		bfile="$1";;
+	esac
+	shift
+done
+
+[ -e "$bfile" ] || die "cannot find $bfile"
+GIT_DIR=$(git-rev-parse --git-dir) || die "Not in a git directory"
+
+# get the objects
+unzip -p "$bfile" .gitBundlePack | git-unpack-objects
+
+# check each reference, assure that the result would be valid before updating local ref
+unzip -p "$bfile" .gitBundleReferences | while read sha1 ref ; do
+	if [ -z "$shallow" ] ; then
+		result=$(git fsck $sha1)
+		havemissing=$(echo "$result" | grep '^missing')
+	else
+		# accept a shallow transfer
+		havemissing=
+	fi
+	ok=
+	if [ ! -z "$havemissing" ] ; then
+		echo "Not updating: $ref to $sha1"
+		echo "Bundle does not contain all required objects. (possibly partial) errors:"
+		echo "$result" | head
+	elif [ -z "$force" ] ; then
+		# update only if non-fastforward
+		local=$(git-rev-parse --verify "$ref^0" 2>/dev/null)
+		if [ ! -z "$local" ] ; then
+			mb=$(git-merge-base $local $sha1)
+			if [ "$mb" != "$local" ] ; then
+				echo "Not applying non-fast forward update: $ref"
+			else
+				ok=1
+			fi
+		else
+			ok=1
+		fi
+	else
+		#forced, accept non-fast forward update
+		ok=1
+	fi
+	if [ ! -z "$ok" ] ; then
+		echo "updating: $ref to $sha1"
+		git-update-ref -m "git-unbundle update" $ref $sha1
+	fi
+done
-- 
1.5.0.rc3.24.g0c5e
Previous: Mark LevedahlNext: Mark Levedahl
Message 3 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.