**文書の過去の版を表示しています。**
GitのBundleファイル運用
Gitの使い方としてローカルのリポジトリとリモートの共有リポジトリという構成が基本だろう。だが、オンラインでのリポジトリアクセスができない場合がある。こういう時にBundleファイルを用いてリポジトリ間でデータ同期が可能である。
BundleファイルはGitコマンドで作成したり読み込みができるのだが、何度も行う作業であればスクリプト化してしまうべきであろう。
これらのバッチ/スクリプトをリポジトリ直下に置いて起動すれば、バンドルファイルの作成や読み込みがメニュー選択するだけで実行可能になる。
これらのスクリプトでバンドルファイルを読み込むと、importブランチに反映される。確認して問題が無ければmasterブランチにマージする。
- 2025/06/01 Bundleファイルの対象とするコミットを選択する機能を追加
バッチ版
<file bat Git-Bundle.bat> @echo off set BUNDLE=Git-RepoExport.bundle set ARCHIVEZIP=Git-Archive.zip set ARCHIVETGZ=Git-Archive.tgz set REFNAME=refs/heads/master set COMMIT=HEAD :MENU cd %~dp0 echo. echo * MENU * echo 1: Verify Git bundle file echo 2: Fetch Git bundle file echo 3: Create Git bundle file echo L: List of commits echo S: Select a commit echo T: Create Git tgz-archive file echo Z: Create Git zip-archive file echo q: Quit set /P INPUT=“%COMMIT%»> ” echo. set SELECT=%INPUT:~0,1% if “%SELECT%”==“1” goto SELECT1 if “%SELECT%”==“2” goto SELECT2 if “%SELECT%”==“3” goto SELECT3 if “%SELECT%”==“L” goto SELECTL if “%SELECT%”==“S” goto SELECTS if “%SELECT%”==“T” goto SELECTT if “%SELECT%”==“Z” goto SELECTZ if “%SELECT%”==“q” goto eof goto MENU :SELECT1 echo [ Verify Git bundle file ] git bundle verify %BUNDLE% goto MENU :SELECT2 echo [ Fetch Git bundle file ] git fetch %BUNDLE% master:import goto MENU :SELECT3 echo [ Create Git bundle file ] if “%COMMIT%”==“HEAD” ( git bundle create %BUNDLE% HEAD %REFNAME% ) else ( git bundle create %BUNDLE% %REFNAME% ^^%COMMIT% ) goto MENU :SELECTL git log –oneline goto MENU :SELECTS echo [ Select a commit ] set /P COMMIT=“%COMMIT% → ” goto MENU :SELECTT echo [ Create Git tgz-archive file ] git archive HEAD –format=tgz -o %ARCHIVETGZ% goto MENU :SELECTZ echo [ Create Git zip-archive file ] git archive HEAD –format=zip -o %ARCHIVEZIP% goto MENU :eof </file> ===== shell版 ===== <file sh Git-Bundle.sh> #! /bin/sh # BUNDLE=Git-RepoExport.bundle ARCHIVEZIP=Git-Archive.zip ARCHIVETGZ=Git-Archive.tgz REFNAME=refs/heads/master COMMIT=HEAD # # Function menulist() { n=1 cat « END | while read text * Menu * 1) Verify Git bundle file 2) Fetch Git bundle file 3) Create Git bundle file L) List of commits S) Select a commit T) Create Git tgz-archive file Z) Create Git zip-archive file q) Quit END do echo “$text” n=
expr $n + 1
done return } menulist echo -n “${COMMIT}»> ” while read input do case $input in 1) echo “[ Verify Git bundle file ]” git bundle verify $BUNDLE ;; 2) echo “[ Fetch Git bundle file ]” git fetch $BUNDLE ${REFNAME}:import ;; 3) echo “[ Create Git bundle file ]” if [ “${COMMIT}” = “HEAD” ] then git bundle create $BUNDLE HEAD ${REFNAME} else git bundle create $BUNDLE ${REFNAME} ^${COMMIT} fi ls -ld $BUNDLE ;; S) echo “[ Select a commit ]” echo -n “${COMMIT} –> ” read COMMIT test -z “${COMMIT}” && COMMIT=HEAD ;; L) echo “[ List of commits ]” git log –oneline ;; T) echo “[ Create Git tgz-archive file ]” git archive HEAD –format=tgz -o $ARCHIVETGZ ls -ld $ARCHIVETGZ ;; Z) echo “[ Create Git zip-archive file ]” git archive HEAD –format=zip -o $ARCHIVEZIP ls -ld $ARCHIVEZIP ;; q) echo “Bye!” break ;; *) echo “?” ;; esac echo menu_list echo -n “${COMMIT}»> ” done </file>