目次

GitのBundleファイル運用

Gitの使い方としてローカルのリポジトリとリモートの共有リポジトリという構成が基本だろう。だが、オンラインでのリポジトリアクセスができない場合がある。こういう時にBundleファイルを用いてリポジトリ間でデータ同期が可能である。 BundleファイルはGitコマンドで作成したり読み込みができるのだが、何度も行う作業であればスクリプト化してしまうべきであろう。 これらのバッチ/スクリプトをリポジトリ直下に置いて起動すれば、バンドルファイルの作成や読み込みがメニュー選択するだけで実行可能になる。 これらのスクリプトでバンドルファイルを読み込むと、importブランチに反映される。確認して問題が無ければmasterブランチにマージする。

バッチ版

Git-Bundle.bat
@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版

Git-Bundle.sh
#! /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