SourceTreeから始めるGit

  • 154
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

SourceTreeというガッツリしたGUIクライアントができてから、「Gitはコマンド打つべし」という感じでもなくなりつつあるかなと感じている(現に、TortoiseSVNを使っているときにSVNのコマンドを意識したことはなかった)。

そんなわけで、ここではGitの詳しい説明は一切はしょりSourceTreeの操作にのみ焦点を当てて解説を行う。ただ、コマンドにも興味あるという方に備え、コマンドも併記しておく。

インストール

こちらにアクセスしてインストール。
https://www.atlassian.com/ja/software/sourcetree/overview

なお、以下の説明ではWindows版を使用。

初期設定

ツール>オプションから各種設定が可能。見ておくべき箇所は以下3点。

  • 一般(git config)
    ユーザー名/メールアドレスは必ず設定しておく。インストール時に設定を求められると思うので特段設定することはないかも。

  • 差分(git config difftool/mergetool)
    特にMergeはツールがあったほうが便利なので設定しておく。
    0.setting.PNG

WinMergeを使うのも良いがマージで使う際は小難しいオプションが必要なので、ここは推奨されているP4Merge Visual Merge Toolをインストールしておくと便利。
※インストール時はP4Merge Visual Merge Tool以外×にする。

  • ネットワーク(git config http.proxy) プロキシ配下で使用する場合、プロキシの設定をしておく。

基本操作

リポジトリの作成(git init / git clone)

まずは、リポジトリの作成を行う。
1.cloneRepository.PNG

ローカルで作成するか、リモートにあるリポジトリを取ってくるかの二択になる。
ここは迷うところはそんなにないはず。

変更管理(git add / git commit / git push)

Gitでの変更は、コミットという単位で管理される。
このコミットを行う際は、「どの変更をコミットに入れるか選択する」「実際にコミットする」という二段階の手順を踏む。

SourceTreeでは図の左下にある矢印ボタンで、コミット対象にしたり外したりすることができる。
2.filechange.PNG

変更対象は行単位でも選択可能なため、同じファイル内の変更を別々のコミットに分けることもできる。
2-1.filechange.PNG

変更対象を選んだら、コミットを実行する。
3.commit.PNG

コミットはあくまでローカルで行われるため、リモートでバージョン管理を行っている場合はこのコミットをサーバーに送る必要がある(push)。

SourceTreeでは、チェックを入れることでコミットと同時にpushをすることが可能。
pushを別に行いたい場合は、メニューバーのPushから行うことができる。

ブランチでの作業

Gitではブランチを利用して作業するのが一般的だ。
通常はmasterというメインのブランチを主軸に、各種変更はそれをコピーしたブランチで一旦行い、テストが完了したらmasterに統合(merge)するという手順を取る。

ここでは、ブランチの作成⇒masterへの統合までの作業をSourceTreeで行ってみる。

ブランチの作成/チェックアウト(git branch / git checkout)

ブランチは、リポジトリ同様ローカルで新規に作成するかリモートリポジトリにすでにあるものを取ってくるかする。
ローカルでブランチを作成する場合は右クリックから作成可能。
リモートにブランチが既にある場合は、Checkoutから、Checkout new Branchで取ってくることができる。

4.checkout.PNG

なお、StashというAtlassian純正ツールを使用している場合は以下のようにすることができる。

Stash上で、Check out in SourceTreeというまんまのメニューを選択。
a1.checkoutBranch.PNG

対象のリポジトリからのcloneが初めての場合、Clone Newを選択。
a2.cloneTarget.PNG

既に他のブランチ(master含む)がローカルにある場合Checkout Existingを選択。

a2.cloneTargetExist.PNG

ブランチの取得が終了すると、以下のように表示される。
現在いるブランチは太字で表示され、他のブランチをダブルクリックすることでブランチを切り替えることができえる(これをチェックアウトと呼ぶ)。ブランチを切り替えるとローカルのファイルセットが切り替わっていることが確認できるだろう。

4-2.checkout.PNG

なお、SourceTreeではブランチ名に/を入れることでフォルダのように管理することが可能。

masterの変更を取りこむ(git merge)

自分のブランチ上で作業をしている間にmaster側が変更される、なんてことは往々にしてある。
そのため、特にこれからレビューしてもらうなんて時には必ずmasterの変更を自分のブランチにも反映しておく必要がある。

まず、ローカルのmasterを最新の状態にするため、fetchを行う。
5-2.conflict.PNG

続いて、自分のブランチ上にいることを確認した上でmasterをmergeする。
5-3.conflict.PNG

運よく成功すれば問題はないが、変更のバッティング(コンフリクト)が発生することもある。
そうした場合はコンフリクトの修正に取り掛かる。
5-5.conflict.PNG

先ほど設定したマージツールを使用する場合、Launch External Merge Toolを実行
5-a.conflict.PNG

こちらがP4Mergeの画面。左右に各ブランチの変更・中央にmasterのHEAD?、画面最下部がマージ結果となっており、ここを編集して保存が可能。マージ専用ツールだけあって非常にわかりやすい構成。
5-b.conflict.PNG

なお、ローカル優先/相手優先という一括した操作ならSourceTree上から可能。
5-6.conflict.PNG

コンフリクトの修正が完了したら、コミットを行う。そうすると、作業中のブランチにmasterの変更が統合された感じで表示される。
5-7.conflict.PNG

自身の変更、masterの変更、何れも完了したらpushを行いリモートリポジトリの更新を行っておく。

Pull Requestの作成/マージ

GitHubやBitbucketでのPull Requestを見ても食傷気味と思うので、ここではStash上での作業を紹介する。

まずはPull Requestを作成。SourceとDistinationをきちんと確認しておく。
8-1.pullrequest.PNG

作成されたPull Requestはこんな感じになる。
8-2.pullrequest.PNG

Mergeは右上のボタンから行う。なお、Declineを押せば削除になる。
※繰り返すが、ここのマージでコンフリクトが発生するとややこしくなるので、必ずローカルでmasterのmergeを行っておくこと(警告が出ると思われるが)。
8-3.pullrequest.PNG

なお、リポジトリの設定で「誰か一人が承認するまでMergeできない」という風にすることも可能。
8-4.pullrequest.PNG

マージされると、下記のようにブランチの変更がmasterに取り込まれる。

9.pullLocal.PNG

その他操作

サブモジュール

サブモジュールについても、SourceTreeで簡単に作成することができる。

右クリックからAdd Submodule
submodule1.PNG

サブモジュールの参照先を追加
submodule2.PNG

サブモジュールが追加される。
submodule3.PNG

追加されたサブモジュールをダブルクリックすると、サブモジュール側のコミットログが確認できる。サブモジュール内のファイルを変更した場合も、こちらで変更を確認可能。通常のリポジトリ同様の操作を行うことができる。
submodule4.PNG

なお、サブモジュールとは他リポジトリの特定コミットへの参照であるため、ローカルでサブモジュールを修正しコミットまで行うと、参照先のコミット番号が変わったという変更が本体側で発生する。これはサブモジュール側の変更とは別にコミットする必要がある。
(つまり、参照しているサブモジュールの変更を行う場合は、サブモジュール側の変更と本体での参照先の変更の2つが必要)。

submodule5.PNG

以上が、Source Treeを利用した操作となる。