Mach3.laBlog

更新業務の差分データ作成にGitを活用してみる

この記事は賞味期限切れです。(更新から1年が経過しています)

バージョン管理システムとして様々なシーンで目にするようになったGitですが、 今日は複数人によるプロジェクトではなく、一人で担当するようなシンプルな更新業務で使用するケースを考えてみます。

更新業務の差分データ作成にGitを活用してみる

前提となるストーリー

例えば、ヒサユキ君(仮名)が新たにこんな案件の担当となったとしましょう。 担当業務も増えてきて、そろそろ少し作業の効率化を図りたいところ。

  1. 定期的にあるWebサイトの更新業務を請け負っている
  2. 孫受けでWebサーバへのアクセス権がないので、データ納品後、先方からサーバへアップロードしている
  3. Webサイトのデータはフルパッケージだと大変サイズが大きいので、差分ファイルで納品したい
  4. 担当は自分一人

差分ファイルのアーカイブならzipコマンドでも出来なくはないですが、
「せっかく流行なので練習ついでにGitを導入して管理してみよう!」
ヒサユキ君はそう思ったわけです。

※ Gitは既に導入されていて、基本的な知識がある前提で進めます

リポジトリの初期化

まず、リポジトリを初期化します。 ターミナル(またはGit Bash)でデータの入っているディレクトリに移動し、git initコマンドを実行しましょう。

$ cd /the/path/to/html
$ git init
Initialized empty Git repository in /the/path/to/html/.git/

そして空のリポジトリに今あるファイルを全て登録し、最初のコミットをしておきます。

$ git add .
$ git commit -m "first commit"

これでGitを使う準備が整いました。

作業用のブランチを作る

次に、更新作業を行うブランチを作ります。ここでは update ブランチ等にしておきます。 (コミットから差分を抽出する事も勿論できますが、 作業期間が切られている場合はブランチをベースにした方が分かりやすいと思います)

$ git branch update
$ git checkout update

branch コマンドで現在のブランチ(master)を元にした新しいブランチ(update)を作り、 checkout コマンドでブランチをupdateに切り替えます。

この二行のコマンドは、checkoutコマンドの -b オプションで一発にまとめる事ができます。 下のコマンドは上の二行と同じ処理をします。

$ git checkout -b update

ちゃんと update ブランチにスイッチできたか確認してみましょう。

$ git branch
  master
* update

“*” がついているのが、現在チェックアウトしているブランチです。 ここからの更新作業は、updateブランチで行う事にします。

更新作業をする

Gitが後で諸々をまとめてくれるので、ヒサユキ君は余計な事を考えずに更新作業に没頭する事ができます。 更新作業の合間の区切りの良いところでコミットをしておきましょう。ブランチはupdateのままです。

$ git commit -a -m "update company profile"

度重なる修正作業を繰り返し辟易する中、ようやくクライアントからのOKが出ました。 ヒサユキ君は納品ファイルの作成をはじめます。コミットのし忘れが無いか確認しておきましょう。

$ git status
# On branch update
nothing to commit (working directory clean)

更新されたファイルを一覧表示する

更新されたファイルを一覧表示する

まずはgit diffを使ってどのファイルが更新されたかをリストアップしてみます。

$ git diff master --name-only

今回の更新で内容が変更されたファイルが一覧表示されます。 ヒサユキ君はここで、味わった苦渋やなめた辛酸などを思い出しながら、少しトイレで泣きます。

更新されたファイルをアーカイブファイルにまとめる

差分ファイルをアーカイブするにはgit archiveを使います。

$ git archive --format=zip HEAD `git diff master --name-only` -o archive.zip

この一行をオプション毎に細かく分解すると…

  • git archive ( アーカイブファイルを作ります)
  • –format=zip (形式はzipで)
  • HEAD (現在のブランチの最新コミットから抽出します)
  • `git diff master –name-only` (更新されたファイルを抽出の対象にします)
  • -o archive.zip (出力ファイル名はarchive.zipにします)

他にも有用なオプションがあるので、詳しくはマニュアルを見てみてください。
cf) git-archive(1)

「`」で囲われた部分は、前項のファイルリストの出力です。「`」で囲う事で、他のコマンドの結果をそこに展開する事が出来ます。 「`」は「Shift + @」で入力できます。

出力されたarchive.zipをクライアントに提出し、今期分の更新は無事完了しました。

お疲れ様でした!

masterブランチにマージする

masterブランチにマージする

次期の更新に備えて、updateブランチでおこなった更新を全てmasterブランチにマージしておきます。

$ git checkout master
$ git merge update

checkout でブランチをスイッチし、mergeで変更をマージします。 もしupdateブランチが不要ならばブランチを削除しましょう。

$ git branch -d update

-d オプションを使うことで対象ブランチを削除できます。

まとめ

複数人によるプロジェクトで力を発揮するバージョン管理システムですが、 ひとりで進める案件でも色々役立つ場面が多いです。 事故を未然に防ぐ為にも、是非導入しておきたいですね。

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

Gitわかった。 | Regelog2d41d8cd98f00b204e9800998ecf8427e