ReAge’s diary

気になったこととか、まとめたいことを淡々と書きます

Gitのお勉強 第2幕

さて、今回も前回に引き続きGitのお話です。

独習Gitでいう第7章に相当。

前回と同じく自分の中での情報整理用です。

 

まず今回初めて知って驚いたのが、Gitではコミットする内容部分を選択することができるということ。

 

これまたSubversion(以下svn)との比較になってしまうのですが、svnだとファイルをドカッと丸ごと同期させる形でリポジトリにコミットするんですよね。

 

だからsvnを使用した管理だと開発中に仮にデバッグ用のコードとかを入れた場合はコミットする時には消さないといけないわけです。

 

ところが、Gitではコミット時に必要な部分だけを選択してコミットすることができる。

 

これでデバッグコード等を(自分の作業環境にある)ソース本体から物理的に削除する必要がなくなるわけですね。

 

なんだかんだそういうデバッグコードってその修正をコミットした後も再利用したくなる時って結構あるんですよね。

コミットする度に(コミット用に)デバッグコード消して、作業環境でもう1回復活させて、なんてやってたらはっきり言って手間でしょうがないです。

 

こういうところがスピード感が大事になるアジャイル開発では必要になる要素なんだと思います。

(実際にやったことないのでわからないですが)

 

ただし、この部分コミットはあくまで手動で選択するわけなので、コミット漏れはないように気を付ける必要があります。

前述のように自分の環境でだけ残したいものを意図的にコミット対象から外せるため、必要な処理をコミット対象から外してしまい、自分の環境では問題なく動く(ソースが完全)が、リポジトリをチェックアウトした他のユーザーからは動かない(ソースが不完全)といったことも起こりえるわけです。


少し極端な例えですが、以下のような場合が挙げられます。

●自分の作業環境にあるソース(正しく動く)
int a = 1;
int b = a * 2;
System.out.println(b);

リポジトリにコミットされているソース(コンパイルエラー)

int b = a * 2;
System.out.println(b);

 

1行目の変数aの宣言をコミットしなかったため、2行目のaが正しく代入できずにコンパイルエラーとなってしまいます。

 

このため、選択コミット時にはよりコミットチェックが難しくなりますが、全体的にはとても便利な機能です。

 

また、慣れればコマンドラインでやった方が早いと思いますが、慣れないうちはgit guiを使用してGUI環境でやる方が安全で直感的に作業できます。

 

行をクリックして選択していく感覚はWinMargeを使用してソースを差分単位でマージする時の感覚に近いです。

 

GUIではなくコマンドラインから作業する場合は"git add -p"を使用します。

 

すると差分情報やらが出力された後に選択を要求されますが、テキストエディタを使用する場合は"e"を使用します。

(ちなみに、ここで出る差分情報は"git diff"を使用した時と同じ内容です)

 

この操作をする場合はGitに紐付けているテキストエディタで編集することができるので、自分の使いやすいエディタを設定しておくのもいいと思います。

(自分はインストール時に知らずにVS Codeを設定していてそのまま使用しています。デフォルトだとこれまたLinuxで頻繁に使われるviになるようです)

 

エディタで編集する場合は直接のテキスト操作になるので、ソースから不要部分をまるっと削ぎ落とす形の作業になります。

 

他の選択オプションについては別の機会でまたまとめようと思います。

(ここまでで少し長くなってしまったので)