====== GitのBundleファイル運用 ======
Gitの使い方としてローカルのリポジトリとリモートの共有リポジトリという構成が基本だろう。だが、オンラインでのリポジトリアクセスができない場合がある。こういう時に[[https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E3%83%90%E3%83%B3%E3%83%89%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90|Bundleファイル]]を用いてリポジトリ間でデータ同期が可能である。
BundleファイルはGitコマンドで作成したり読み込みができるのだが、何度も行う作業であればスクリプト化してしまうべきであろう。
これらのバッチ/スクリプトをリポジトリ直下に置いて起動すれば、バンドルファイルの作成や読み込みがメニュー選択するだけで実行可能になる。
{{ :bundle.png?400 |}}
これらのスクリプトでバンドルファイルを読み込むと、importブランチに反映される。確認して問題が無ければmasterブランチにマージする。
===== バッチ版 =====
@echo off
set BUNDLE=Git-RepoExport.bundle
set ARCHIVE_ZIP=Git-Archive.zip
set ARCHIVE_TGZ=Git-Archive.tgz
: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 T: Create Git tgz-archive file
echo Z: Create Git zip-archive file
echo q: Quit
set /P INPUT=">>> "
echo.
set SELECT=%INPUT:~0,1%
if "%SELECT%"=="1" goto SELECT_1
if "%SELECT%"=="2" goto SELECT_2
if "%SELECT%"=="3" goto SELECT_3
if "%SELECT%"=="T" goto SELECT_T
if "%SELECT%"=="Z" goto SELECT_Z
if "%SELECT%"=="q" goto eof
goto MENU
:SELECT_1
echo [ Verify Git bundle file ]
git bundle verify %BUNDLE%
goto MENU
:SELECT_2
echo [ Fetch Git bundle file ]
git fetch %BUNDLE% master:import
goto MENU
:SELECT_3
echo [ Create Git bundle file ]
git bundle create %BUNDLE% HEAD master
goto MENU
:SELECT_T
echo [ Create Git tgz-archive file ]
git archive HEAD --format=tgz -o %ARCHIVE_TGZ%
goto MENU
:SELECT_Z
echo [ Create Git zip-archive file ]
git archive HEAD --format=zip -o %ARCHIVE_ZIP%
goto MENU
===== shell版 =====
#! /bin/sh
#
BUNDLE=Git-RepoExport.bundle
ARCHIVE_ZIP=Git-Archive.zip
ARCHIVE_TGZ=Git-Archive.tgz
#
# Function
menu_list() {
n=1
cat << END | while read text
*** Menu ***
1) Verify Git bundle file
2) Fetch Git bundle file
3) Create Git bundle file
T) Create Git tgz-archive file
Z) Create Git zip-archive file
q) Quit
END
do
echo "$text"
n=`expr $n + 1`
done
return
}
# Main
menu_list
echo -n ">>> "
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 master:import
;;
3)
echo "[ Create Git bundle file ]"
git bundle create $BUNDLE HEAD master
ls -ld $BUNDLE
;;
T)
echo "[ Create Git tgz-archive file ]"
git archive HEAD --format=tgz -o $ARCHIVE_TGZ
ls -ld $ARCHIVE_TGZ
;;
Z)
echo "[ Create Git zip-archive file ]"
git archive HEAD --format=zip -o $ARCHIVE_ZIP
ls -ld $ARCHIVE_ZIP
;;
q)
echo "Bye!"
break
;;
*)
echo "?"
;;
esac
echo
menu_list
echo -n ">>> "
done