ルモーリン
ホーム 更新 Perl Sample サービス 雑談 鉄ゲタ Linux リンク 連絡先

Git初期設定スクリプト

投稿:2022-05-07

ちょっと前にGitというコードを巻き戻せるツールを知りました。 隣のディレクトリにバックアップさせておけば、陶芸家が焼いたお皿が失敗したときに地面に叩きつけて割る感じに巻き戻せます。 う~ん、Gitは皆さんのほうが詳しいので省略。 これで管理するプロジェクトが3個目になるとGitの初期化が面倒になってきました。 面倒なことはスクリプトに書いておき、今後の初期化作業はスクリプトを実行すれば済む訳です。

プロジェクトのディレクトリ、バックアップ用ディレクトリを設定できます。 セットアップを実行すると、

  1. パックアップ用ディレクトリを作る
  2. 共有リポジトリに初期化
  3. プロジェクトのディレクトリをGitで初期化
  4. 共有リポジトリ宛にpushするよう設定
  5. 全ファイルをコミット、コメントは「最初のコミット」
  6. 共有リポジトリにpush

せっかくだからスクリプトでメニュー選択や色表示をやってみました(面白いなコレ)。

スクショを撮ってみました。 new_projectというディレクトリにプロジェクトがあり、バックアップ用にnew_repositoryを作ります。 プロジェクトのディレクトリがなかったり、バックアップ用のディレクトリが既にある場合をチェックして実行を止めます。

こんな感じ。 頭にメールアドレスとユーザー名があるので万が一使う人がいたら適宜変更してください。

#!/bin/bash

email="lemorin@lemorin.jp"
user="lemorin"

function color_setup() {
	color_red="\e[91m"
	color_green="\e[92m"
	color_reset="\e[0m"
}

function disp_menu() {
	execute_ok=""
	local msg=""
	if [ "" = "$dir_project" ]; then
		msg="プロジェクトのディレクトリが設定されていません"
	elif [ ! -d "$dir_project" ]; then
		msg="プロジェクトのディレクトリがありません"
	elif [ "" = "$dir_repository" ]; then
		msg="リポジトリのディレクトリが設定されていません"
	elif [ -d "$dir_repository" ]; then
		msg="リポジトリのディレクトリが既にあります"
	else
		msg="セットアップできます"
		execute_ok="ok"
	fi

	echo "***** メニュー *****"
	local color_s
	if [ "" != "$dir_project" -a -d "$dir_project" ]; then
		color_s=$color_green
	else
		color_s=$color_red
	fi
	echo -e "p プロジェクト$color_s[$dir_project]$color_reset"

	if [ "" != "$dir_repository" -a ! -d "$dir_repository" ]; then
		color_s=$color_green
	else
		color_s=$color_red
	fi
	echo -e "r リポジトリ  $color_s[$dir_repository]$color_reset"

	if [ "ok" = "$execute_ok" ]; then
		color_s=$color_green
	else
		color_s=$color_red
	fi
	echo -e "${color_s}s$color_reset セットアップ"

	echo "q 終了"

	if [ "ok" = "$execute_ok" ]; then
		color_s=$color_green
	else
		color_s=
	fi
	echo -e "$color_s$msg$color_reset"

	echo -n "選択> "
	read menu_sel
}

function ask_directory() {
	local query="$1"
	echo -n "$query> "
	read directory
}

function setup_git() {
	echo "アカウント共通のgit設定"
	git config --global push.default matching
	git config --global user.email "$email"
	git config --global user.name "$user"

	echo "リポジトリ側"
	echo "ディレクトリ作成 $dir_repository"
	mkdir "$dir_repository"
	dir_repo_abs=$(cd $dir_repository && pwd)
	cd "$dir_repository"
	echo "git初期化"
	git init --bare --share
	cd ..

	echo "プロジェクト側"
	cd "$dir_project"
	echo "git初期化"
	git init
	git add --all
	git commit --message="最初のコミット"
	git remote add origin "$dir_repo_abs"
	git push --set-upstream origin master
	cd ..
}

color_setup

echo -e "${color_green}Gitセットアップ$color_reset"

dir_project=""
dir_repository=""
execute_ok=""
menu_sel=""
while [ "q" != "$menu_sel" ]
do
	disp_menu
	if [ "p" = "$menu_sel" ]; then
		ask_directory "プロジェクトのディレクトリ"
		dir_project="$directory"
	elif [ "r" = "$menu_sel" ]; then
		ask_directory "リポジトリのディレクトリ"
		dir_repository="$directory"
	elif [ "s" = "$menu_sel" -a "ok" = "$execute_ok" ]; then
		echo -e "${color_green}セットアップ実行$color_reset"
		setup_git
		menu_sel="q"
	fi
done

echo -e "${color_green}終了$color_reset"