はじめに
業務で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作成までやってみたいですね!