たくさんcloneしてきたgithub一覧やnpm_modulesをコマンド一発で管理する方法

2020年5月28日

テクノロジー プログラミング

難しいプログラムをやる時に、どうしても甘いものが欲しくなる、ユゲタです。 自作しているWEBサイトやホームページを簡単に構築できるフレームワークを、wordpressのように、プラグインや各種モジュールを個別にgit管理することにしたら、 その数なんと50個を超えてしまって、もはや手作業でcommitやサーバーへのpush作業をしているだけで、アホらしい時間を費やしてしまうので、 コマンド一発で、自動でcommitして、ローカル更新がされている場合は、サーバーへpush、サーバー更新がされている場合は、ローカルへpull、そもそもモジュールが入っていなければcloneしてくれるというツールを作ってみました。

本日のIT謎掛け

「バッチプログラム」と、かけまして・・・ 「日曜大工で使う、子供用のトンカチ」と、ときます。 そのココロは・・・ ジドウ(自動と児童)で、タタ(叩ける)ける、優れもの。

git_auto

https://github.com/yugeta/git_auto このツールは、githubやその他のgitコマンドでcloneやpush,pusllができるサイトで、モジュール管理をしている状態のリポジトリを、jsonファイルに登録しておくことで、自動的に処理を判別して、操作してくれるバッチツールです。 基本的にMITなので、githubからcloneしてお好きに使ってくださいませ。 使い方は、簡単で、"auto.json"ファイルに、サンプルのように設定をしておいて、下のようにコマンドを実行するだけです。 sh auto.sh プロジェクトのroot階層において実行することで、プロジェクト内にあるたくさんのリポジトリを一括管理することができます。

json設定ファイルの書き方

[ { "type" : "git", "dir" : "data/markdown_viewer", "git" : "https://github.com/yugeta/markdown_viewer.git" }, { "type" : "git", "dir" : "data/scroll_function", "git" : "https://github.com/yugeta/scroll_function.git" } ] サンプルで登録されている内容を変更したり、追加することで、簡単に設置完了することができます。 type : gitコマンドでのアクセスをする管理ですが、最近のwebサービスでよく使う、nodejsも管理できるので、"type:node"とすると、npmでのinstallやバージョン確認ができるようになります。 dir : リポジトリを格納するディレクトリ(すでに入っている場合でも後から登録できます) git : gitサーバーへのアクセスpath(認証を自動でしてくれる設定をローカル側でやっておくことをおすすめします) pullonly : サーバーリポジトリが自分管理のものであれば、自由にpushしても問題ありませんが、人様のリポジトリの場合は、pull(clone)のみしかしたくない場合に、この設定をして"1"と値を付けておくことで、pull専用の管理ができます。 branch : 特定のリポジトリの任意のbranchを管理することができます。デフォルト(設定が書かれて無い場合)は"master:master"で、 "ローカルブランチ:サーバーブランチ"という風に書くことができます。 flg : "1"を設定しておくことで、設定ファイルに記述されているけど、管理を無視することができるようになります。

コマンドオプション

デバッグも兼ねて、いくつかのモードを用意しておきました。 サンプルを実行するパターンで紹介します。

テストモード(チェック)

設定ファイルのチェックと、リポジトリ状態のチェックのみを行うことができます。 $ sh auto.sh -m check - mode : check - setting-file : auto.json - git-version : git version 2.17.1 - jq-version : jq-1.5-1-a5b5cbe (check) Same : data/markdown_viewer (check) Same : data/scroll_function ローカルとサーバーの状態が、同じかどうかを判定してくれます。 同じ場合は「Same」、違っている場合は「Diff」と表示されます。 Diffの場合は、そのリポジトリをcommitしてあげるといいでしょう。

commitモード

全てのリポジトリを一括でcommitすることができます。 その際のcommit-commentは、コマンド実行時のタイムスタンプのみが記載されます。 細かな文言管理で、commitメッセージを整えている場合は、checkモードで確認して、個別に手作業でcommitするようにしましょう。

pullモード

全てのリポジトリで、サーバーが更新されている場合にpullすることができます。

pushモード

全てのローカルで更新されたリポジトリを一括でpushすることができます。 commitされていないHEADが進んでいるリポジトリは、自動でcommitされます。

autoモード(デフォルト)

-mを指定せずに実行すると、autoモードになり、上記の操作を自動判別して、一括で全ての操作を行います。

要望(今後のアップデート予定)

今回は、jsonファイルを設定データで使うため、"jq"コマンドをインストールしておかなければ行けないのですが、csvファイルでの設定もできるようにしようかと考えています。 そうすることで、サーバー管理の状態が少しでも軽くなりますからね。 あと、サーバー環境などで、開発をしているような場合、時間がきたら、自動でauto実行できるようにしておけば、commitを取りこぼすことがなくなるので、そうしたモードも付けていきたいですね。 フレームワークがかなり自動化してきて、大きなプログラムになっても、頑丈な環境を構築できそうです。 肝心なことは、その中身ですけどね。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。