おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

【Git】シェルスクリプトを用いてブランチへのプッシュまで自動化してみた。

はじめに

業務で100個近いリポジトリに特定ファイルを追加してデフォルトブランチへMRを作るという超単純作業が発生したのでシェルスクリプトを用いて各リポジトリのブランチまで一気にプッシュするものを作ってみました。
※本当はMR作成までいきたかったけど、それはまた今度にします。

概要

下記のように作業が必要なリポジトリ群があるとします(このフォルダ数が100個近く)。

1つずつリポジトリにアクセスしてブランチ切ってファイル追加(デフォルトブランチが更新されているかもしれないのでpull作業も)、コミット~プッシュまでを手作業でやるのはちょっと大変だなと思ったので何とか自動化しようと思いました。

こういう場合はやはりシェルスクリプトを用いるのが一番お手軽かと思い、やってみた感じです。

サンプルコード

以下にサンプルコードを記載します。

#!/bin/bash

TargetPath=`pwd`
Targets=`find ${TargetPath}/* -maxdepth 0 -type d`
WorkBranch="features/add-test-file"
CommitMessage="テストファイルを追加"

for filepath in $Targets 
do
  echo $filepath
  cd $filepath
  git stash -u  # 既存の変更は保留にしておく
  defaultBranch=`git remote show origin | grep 'HEAD branch' | awk '{print $NF}'`  # デフォルトブランチから作業ブランチを切りたいのでデフォルト名を取得
  git checkout $defaultBranch
  git pull origin $defaultBranch
  git checkout -b $WorkBranch
  cp /c/Work/test/test.txt .  # 追加したいファイルを任意のフォルダからコピー
  git add .
  git commit -m $CommitMessage
  git push origin $WorkBranch
done

一連の操作をリポジトリ数分forループで回したのみ、という感じではありますが結構作業が楽になりましたw

おわりに

本当はMR作成までしたかったのですが、一旦時間の都合上リモートブランチへのプッシュのみとなります。
機会があればMR作成までやってみたいですね!