本文へジャンプ

バージョン管理してますか? SourceTreeでGitを操作する【基本編】

Posted by MONSTER DIVE

SourceTreeでGitを操作する【基本編】

MONSTER DIVEでも数年前からGitやSubversionでファイルのバージョン管理を行っているのですが、元来のビビり症に加え、デジタル世界全般=「インダストリア出典」的発想により、以前やったことのある操作であっても、「何事かやらかしてしまうのではないか」「このコマンドを実行したらしばらく沈黙したのち奇音を発して爆発するのではないか(あるいは個人情報がすべてネット上に公開されるのではないか)」という恐怖が一向に拭えません。

今回は、そんなアナログネイティブにも優しいGUIツール「SourceTree」を使ったGitの基本的な使い方についてまとめてみます。

SourceTreeのダウンロード&インストールはこちらから。

Gitの概要

  • 作業履歴を管理できる
  • ファイルを共有できる

Gitの主な機能としてはこの2つがあげられます。
他のPCとのファイル共有やバックアップについては置き場所となるサーバ(リモートリポジトリ)が必要になりますが(※MDの標準環境ではBacklogと連携させております)、自分のPC(ローカルリポジトリ)だけでバージョン管理だけすることも可能です。

ということで、せっかくなのでこのブログ記事も草稿や使用する画像をSourceTree(Git)で管理してみました。
そのリポジトリ作成の様子を無駄にアニメーションGIFにしましたのでこちらどうぞ。
※SourceTree 2.3.2を使用しております。

SourceTreeでバージョン管理だけしてみる図

  1. 『ローカルリポジトリを作成』を選択
  2. バージョン管理するフォルダの置き場所とかリポジトリの名前とか入れて『作成』
  3. リポジトリができた
  4. ファイルを入れると「このファイルで作業したよね?」と表示してくれる
  5. 管理するファイルをindexへ移動する
  6. コメントを書いて『コミット』
  7. 履歴が追加された

Git用語&Sourcetreeの基本操作

クローン

サーバ上のリポジトリ(リモートリポジトリ)の内容を、自分のローカル環境にそのままダウンロードすること。
プロジェクトに参加する最初の最初に必要です。

SourceTreeでクローン

プル

リモートリポジトリから変更履歴をダウンロードすること。
具体的にはダウンロード+マージが行われ、ローカルリポジトリに変更内容が取り込まれます。
MDでは作業開始する時は必ずプルするよう申し渡されております。

SourceTreeでプル

フェッチ

プル同様、リモートリポジトリから変更履歴をダウンロードすることですが、コピーが生成されます。
プルと異なりマージは行われず、ローカルリポジトリには影響しません。
フェッチした後にリモートブランチをマージすれば、ローカルリポジトリに変更内容が取り込まれます。

前述のとおりMDではプルを使っていますが、ネット検索すると、プルではなくフェッチ+マージを推奨する記事も多いです。

コミット

リポジトリに変更履歴を残すこと、またはその履歴のこと。
後から振り返って辿れるよう、タスクが完了した時などキリのいいタイミングで行います。コメント必須。
Backlogでは、コメントに課題のキーを入れるとBacklog上のその課題にもコメントされます。

SourceTreeでコミット

プッシュ

コミットをリモートリポジトリにアップロードすること。
コミットごとにやっても良いですし、細かくコミットを分けている場合などは何個かまとめて行ったりします。

SourceTreeでプッシュ

ブランチ

コミットの流れを分岐させること、または分岐した流れのこと。
文字通り「枝」。

最終目的地は一緒だけどお互いいろいろあるし違う道行くね...みたいな。

SourceTreeでブランチを切る

以下のような時に、ブランチを切ることが多いと思います。

  • バグフィックスなど独自開発を行う時
  • 複数人で開発を行う時
  • 公開フェーズが複数ある時

チェックアウト

ローカルリポジトリを特定のブランチ、コミットに切り替えること。
ブランチを切り替えて作業する他、過去のコミットに戻ってファイルの中身を確認したりすることもできます。

SourceTreeでチェックアウト

マージ

ブランチのコミットを他ブランチへ統合=マージします。

同じグループが違うルートで登山中、それぞれ道すがら出会った人と一緒に登ることになったりいろいろあったけど、頂上で合流してみんなで乾杯...みたいな。

SourceTreeでマージg

Gitが良きようにマージしてくれますが、こんなかんじでマージしましたよという内容がコメントされた新たなコミット(マージコミット)が作られます。

リベース

ブランチのコミットを他ブランチに追加します。
コミットが改変されて履歴は一本化することになります。

行列の分岐していた列に並んで整理券ももらったけど、最終的に1列にしたいからということで最後尾に並び直し。新たな整理券が発行されることになった...みたいな...??

SourceTreeでリベース

リベース後マージすることで、リベースしたコミットの最新まで追いつきます。

コンフリクト

マージを行った際に、こんなメッセージが表示されることがあります。

SourceTreeでコンフリクト

マージする&されるブランチで同一箇所が変更されていると、Gitもどちらを良しとすればいいのかわからず、競合=コンフリクトしてますよと教えてくれます。
コンフリクトするとそのやらかした感に軽くパニックになりますが、落ち着いて解決しましょう。

コンフリクトした時の解決方法

  1. "自分の変更"を使って解決 → いまいるブランチのファイルを正とする
  2. "相手の変更"を使って解決 → マージするブランチのファイルを正とする
  3. コンフリクトしているファイルを手動で修正する

タグ

特定のコミットを後から参照しやすくするために付けておくと便利です。

SourceTreeでタグ付け

まとめ

いつものフロー(クローン、プル、コミット、プッシュ)以外の操作が必要になると、その操作方法や概念をいちいち検索している自分のための覚書として記事にしてみましたが、どなたかのお役に立てれば嬉しいです。

正直なことを言うと、マージとリベースプルとフェッチに関しては、その使いどころがまだしっかり理解できていないというのが本当のところでして、、、「これぞ」という具体例が見つかった暁にはこの場でまたご報告したいと思っています。

Recent Entries
MD EVENT REPORT
What's Hot?