MONSTER DIVEでも数年前からGitやSubversionでファイルのバージョン管理を行っているのですが、元来のビビり症に加え、デジタル世界全般=「インダストリア(出典)」的発想により、以前やったことのある操作であっても、「何事かやらかしてしまうのではないか」「このコマンドを実行したらしばらく沈黙したのち奇音を発して爆発するのではないか(あるいは個人情報がすべてネット上に公開されるのではないか)」という恐怖が一向に拭えません。
今回は、そんなアナログネイティブにも優しいGUIツール「SourceTree」を使ったGitの基本的な使い方についてまとめてみます。
SourceTreeのダウンロード&インストールはこちらから。
Gitの主な機能としてはこの2つがあげられます。
他のPCとのファイル共有やバックアップについては置き場所となるサーバ(リモートリポジトリ)が必要になりますが(※MDの標準環境ではBacklogと連携させております)、自分のPC(ローカルリポジトリ)だけでバージョン管理だけすることも可能です。
ということで、せっかくなのでこのブログ記事も草稿や使用する画像をSourceTree(Git)で管理してみました。
そのリポジトリ作成の様子を無駄にアニメーションGIFにしましたのでこちらどうぞ。
※SourceTree 2.3.2を使用しております。
サーバ上のリポジトリ(リモートリポジトリ)の内容を、自分のローカル環境にそのままダウンロードすること。
プロジェクトに参加する最初の最初に必要です。
リモートリポジトリから変更履歴をダウンロードすること。
具体的にはダウンロード+マージが行われ、ローカルリポジトリに変更内容が取り込まれます。
MDでは作業開始する時は必ずプルするよう申し渡されております。
プル同様、リモートリポジトリから変更履歴をダウンロードすることですが、コピーが生成されます。
プルと異なりマージは行われず、ローカルリポジトリには影響しません。
フェッチした後にリモートブランチをマージすれば、ローカルリポジトリに変更内容が取り込まれます。
前述のとおりMDではプルを使っていますが、ネット検索すると、プルではなくフェッチ+マージを推奨する記事も多いです。
リポジトリに変更履歴を残すこと、またはその履歴のこと。
後から振り返って辿れるよう、タスクが完了した時などキリのいいタイミングで行います。コメント必須。
Backlogでは、コメントに課題のキーを入れるとBacklog上のその課題にもコメントされます。
コミットをリモートリポジトリにアップロードすること。
コミットごとにやっても良いですし、細かくコミットを分けている場合などは何個かまとめて行ったりします。
コミットの流れを分岐させること、または分岐した流れのこと。
文字通り「枝」。
最終目的地は一緒だけどお互いいろいろあるし違う道行くね...みたいな。
以下のような時に、ブランチを切ることが多いと思います。
ローカルリポジトリを特定のブランチ、コミットに切り替えること。
ブランチを切り替えて作業する他、過去のコミットに戻ってファイルの中身を確認したりすることもできます。
ブランチのコミットを他ブランチへ統合=マージします。
同じグループが違うルートで登山中、それぞれ道すがら出会った人と一緒に登ることになったりいろいろあったけど、頂上で合流してみんなで乾杯...みたいな。
Gitが良きようにマージしてくれますが、こんなかんじでマージしましたよという内容がコメントされた新たなコミット(マージコミット)が作られます。
ブランチのコミットを他ブランチに追加します。
コミットが改変されて履歴は一本化することになります。
行列の分岐していた列に並んで整理券ももらったけど、最終的に1列にしたいからということで最後尾に並び直し。新たな整理券が発行されることになった...みたいな...??
リベース後マージすることで、リベースしたコミットの最新まで追いつきます。
マージを行った際に、こんなメッセージが表示されることがあります。
マージする&されるブランチで同一箇所が変更されていると、Gitもどちらを良しとすればいいのかわからず、競合=コンフリクトしてますよと教えてくれます。
コンフリクトするとそのやらかした感に軽くパニックになりますが、落ち着いて解決しましょう。
特定のコミットを後から参照しやすくするために付けておくと便利です。
いつものフロー(クローン、プル、コミット、プッシュ)以外の操作が必要になると、その操作方法や概念をいちいち検索している自分のための覚書として記事にしてみましたが、どなたかのお役に立てれば嬉しいです。
正直なことを言うと、マージとリベース、プルとフェッチに関しては、その使いどころがまだしっかり理解できていないというのが本当のところでして、、、「これぞ」という具体例が見つかった暁にはこの場でまたご報告したいと思っています。