マスターはGitで管理できるのか?その2
前回まではGitのインストールを行い、Deploy USBで取得したマスターイメージをdesktop上のtestフォルダにコピーしました。下図のような状態です。

・インデックスへの追加
それでは試しにこのファイル、何か変更されているか?の確認のため、”git status”と入力して確認しています。そうすると、まだ作成したフォルダにマスターイメージをコピーしただけなので、下図のように表示されます。
これはワークツリーにコピーされただけなので、gitの方では自動的に履歴の追跡などを行わないのでこうなります。

ファイルの履歴の追跡を行うには、追加のコマンドを実行する必要があります。
“git add *.*”など(特に他のファイルがなければ)全てを選択する方法でも、個別ファイル名を指定して実行する事も可能です。(マスターイメージファイルは約7GBあるので、動作には少し時間がかかります)

このように”git add”を実行する事により、ワークツリー上の変化をインデックスに登録します。インデックスに登録した段階ではまだ、追跡対象の候補といった状態なので、ここからローカルレポジトリに対してコミットをする事により、追跡対象となります。
コミット前に再度ステータスを見ると下図のようになります。

新しいファイルがコミット候補のインデックスにありますよ!といった感じで表示されていると思います。
・Gitユーザー設定とローカルレポジトリへのコミット
Gitへのコミットを行う前に、ユーザーの設定を行う必要があります。
使用するユーザー名、あとはメールアドレスを設定しておきます。
設定方法は下図のように今回行っています。

コミットは”git commit”なのですが、簡単なメッセージを残す事が可能です。
git commit –m “Sysprep commit” と今回は入力します。下図のようになります。

この状態で、インデックスからローカルレポジトリにマスターイメージファイルがコミットされた状態となります。状態の流れとしては、下図のようになります。

この状態で、再度ステータスを確認してみると下図のように、コミットする必要がある物はありませんと表示されます。

ローカルレポジトリの情報は、コミットID、元のコミットID、日時、作成者、スナップショット、コミットメッセージが保存されています。インデックスにはスナップショットが保存されます。
・マスターイメージの変更が認識できるか?(やっと本題です)
現在保存しているマスターイメージファイルは”Sysprep”を実行して一般化された状態で、シャットダウンしたOSをDeploy USBで取得した物です。
今度は一度OSを起動してシャットダウンした、一般化されていない状態を取得して保存してみます。
取得した新しいマスターイメージを上書きして保存してから、下記のようにステータスを確認します。下図のようにワークツリーに上書き保存しただけなので、まだインデックスにも追加されていなくてもちろんコミットもされていないと表示されます。
下記のようにSysprepで一般化されたイメージと一般化されていないイメージファイルをGitで変更されたと認識しているのが確認できます。

続いて、今回上書きしたマスターイメージファイルを追加してから、ステータスを再度確認してみます。するとインデックスに追加されたけど、ローカルリポジトリにはコミットされていないと表示されます。

ではコミットを行って再度ステータスを確認します。これで2回目のコミットが完了したので、ローカルリポジトリも最新の状態になりました。

・変更した内容は確認できるか?
実際にSysprepで一般化されたのか?またはされていないのか?をgit diffで確認出来るかを行ってみます。再度 Windows10を一般化して、DeployUSBで取得したマスターイメージをワークツリーに上書きしてみます。今回はワークツリーとインデックス間で比較するgit diffで動作させてみます。本来はコミットする前にgit diff –stageなどで、内容を見てコミットするために使用するのですが、今回は一般化の変更が同表示されるかの確認なので、ワークツリーとインデックス間で行います。
では実際に再度一般化されたマスターイメージを上書きしてから”git diff”を実行してみます。結果は残念ながらバイナリーファイル認識され、文章データなどと異なり、何が追加されたかなどの情報表示には至りませんでした。

・実用性について
今回はGitでマスターイメージファイルの識別できればGitで管理出来るのでは?といった妄想から始めましたが、結果としては向いていない事が判ります。
それはバイナリーファイルとしての認識になる事と、サイズが大きいので、マスターイメージファイルが今の7GBより大きくなれば正常に判断できるのかも不明です。そもそも処理が結構重くなっていました。
せっかくなので、作成したフォルダは文章ファイルなどを保存して、管理に使用しようかと思います。
初回から無理のある企画でしたが、何かの参考とかきっかけになれば幸いです。
また次回も宜しくお願い申し上げます。
By Sales Sato