【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です。
GitをGUIで操作するためのSourceTreeというツールのインストール方法とGitの基礎的な操作方法を知りたい。
こんな悩みを解決します。
目次
Gitとはプログラムのソースコードの履歴などを記録・追跡するための分散型バージョン管理システムです。Gitはリーナス・トーバルズがLinuxカーネルのソースコードを管理するために開発したそうです。Gitってちょっと難しい気がして、ついつい慣れてるSubversionでソースコードを管理したくなりますが、そこをぐっと堪えてGitに触れていきたいと思います。
まず分散型という仕組みがGitを難しく感じさせている気がします。サーバと全く同じ環境が自分の手元にクローンされますが、クローンがどんどん増えていったときにどうやって整合性を保つのか、なんてことが気になります。例えば複数人のエンジニアがそれぞれのクローンにコミットすると、同じリビジョンが重複できちゃう気がしてて、一体どうやって整合性を保つのか。
【答え】
Gitでコミットするとグローバルでユニークであることを保証するために57228b29d976075bdf47eb9ea7ead44c8b867631というような40桁のハッシュ値が識別番号として付けられるので、同じリビジョンのコミットは原理的に存在しないのです。その前提の元、整合性を保つことが可能になります。
詳しい仕組みについては、本文でご説明します。
SourceTreeのインストール方法
①ダウンロードページに行く
ここに行きます。
≫SourceTree Free Git GUI for Mac and Windows
②インストーラーをダウンロードする
「Download for Windows」をクリック。
「I agree …」のチェックをONにして「Download」をクリック。
「ファイルを保存」をクリック。
③インストールする
インストーラをダブルクリック。
Bitbucketのアカウントを持ってる人は「Bitbucket Server」か「Bitbucket」のアイコンをクリック。持っていない方は「Create one for free」をクリック。今回はアカウントを持っていない状態から始める想定で進めます。
メールアドレスを入れて「続行」をクリック。
「フルネーム」と「パスワード」を入れて「私はロボットではありません」にチェックを入れ「続行」をクリック。
認証メールが送られます。
認証メールが届くので「Verify your email」をクリック。
「ユーザ名」を入れて「続行」をクリック。このユーザ名 がアカウント名になるので慎重に決めてください。
アンケートに回答して「続行」をクリック。これでアカウントが作成されました。
アカウントが出来たので「Bitbucket」をクリック。
「Login to Bitbucket」というメッセージと共にブラウザにBitbucketのログイン画面が開きます。
ブラウザ側のログイン画面にログインすると。
ブラウザ画面が切り替わり「Authentication Successful」というメッセージが表示される。
するとインストーラ側に「登録が完了しました!」というメッセージが出るので「次へ」をクリック。
「次へ」をクリック。※Gitだけを試せればよいなら「Mercurial」はOFFにしても良い。
ダウンロード中
ダウンロードが終わると「ツールのインストールが完了しました」と表示されるので「次へ」をクリック。
Gitのconfigで使われる「ユーザ名」「メールアドレス」が自動入力されます。もし自動入力されなかったら入力し「次へ」をクリック。※後で入力できます。
「SSHキーを読み込みますか?」と聞かれるので今回は「NO」を選択。※ダイアログのキャプチャーに失敗しました SSHキーは後で設定可能です。
以上でインストールは完了です。
プログラムがどこにインストールされているか
さて、SourceTreeをインストールした後、ショートカットの類が一切生成されていないことに気づきました。スタートメニューにもないし、Program Files、Program Files(x86)にexeもありません。ではどこか?
ここにありました。非常にわかりにくいですね。またAppDataが隠しフォルダになっているのでご注意ください。
C:\Users\(ログインユーザ名)\AppData\Local\SourceTree\SourceTree.exe
ローカルリポジトリの作成
①プログラム起動
初期画面はこんな感じです。
②ローカルリポジトリを作成
「Create」をクリックし、リポジトリを作成するフォルダを入力後「作成」をクリックします。
リポジトリが作成されるとこんな画面になります。「エクスプローラで開く」をクリックします。
すると「C:\Git\original」フォルダが開きます。隠しフォルダ「.git」が生成されています。
「.git」の中はこんな感じになってます。※直接弄ってはダメ。
ファイルを新規作成しコミット(登録)する
①「TEST.txt」を作成
「TEST.txt」を作成します。
中身はこんな感じ。※なんでもいいです。

/jin-img-shadow]
②ファイルが自動認識されるので、インデックスに追加する
「作業ツリーのファイル」という領域に「TEST.txt」が出現しました。「全てインデックスに追加」をクリック。
③コミット(登録)する
「Indexにステージしたファイル」という領域に「TEST.txt」が出現します。一番下の領域に「新規作成」というコミットに関するメッセージを記入し「コミット」をクリック。
左側の領域にある「master」をクリックすると、「TEST.txt」のコミット結果がみれます。
ファイルを修正してコミットする
①「TEST.txt」に追記する
もともと「TEST」と書いてあったテキストに「1234」を追記して保存しました。
アプリに戻り「ファイルステータス」をクリックすると「作業ツリーのファイル」という領域に「TEST.txt」が出現します。
先程と同じように「全てインデックスに追加」をクリックすると「Indexにステージしたファイル」という領域に「TEST.txt」が出現します。一番下の領域に「1234を追記」というコミットに関するメッセージを記入し「コミット」をクリック。
左側の領域にある「master」をクリックすると、「TEST.txt」のコミット結果がみれます。
ファイルを移動したらどうなるか
①「backup」というフォルダを作成し、そのフォルダの中に「TEST.txt」を移動する
アプリに戻り「ファイルステータス」をクリックすると「作業ツリーのファイル」に変化が起きています。「TEST.txt」が削除(-)され「backup/TEST.txt」というファイルが生成(?)されていますので「全てインデックスに追加」をクリックします。
「Indexにステージしたファイル」という領域に「backupf/TEST.txt」が出現します。一番下の領域に「backupにTEST.txtを移動」というコミットに関するメッセージを記入し「コミット」をクリック。
左側の領域にある「master」をクリックすると、「backup/TEST.txt」のコミット結果がみれます。
ファイルを削除した後に変更をキャンセルするとどうなるか
①「backup」フォルダを消す
backupフォルダを消してしまいました。
アプリに戻り「ファイルステータス」をクリック。「作業ツリーのファイル」に「backup/TEST.txt」の削除(-)が出現するので、右クリックして「破棄」をクリックします。
破棄してよいか聞かれるので「OK」をクリック。
削除したハズの「backup」フォルダが 復元されました。
アプリに戻ると「backup/TEST.txt」の削除(-)が無かったことになってます。
ブランチを作成する
①「ブランチ」をクリックする
masterが選択されている状態で「ブランチ」をクリックします。
「新規ブランチ」に「sub」と入力し「ブランチを作成」をクリックします。
ブランチのところに「sub」というブランチが作成されました。「sub」に〇が付いていますので現在は「sub」がアクティブになってます。
「sub」ブランチにファイルを足して「master」ブランチに切り替える
①「SUB.txt」というファイルを作成しコミットする
「SUB.txt」というファイルを作成します。
「SUB」という文字列を入力して保存します。
「全てインデックスに追加」をクリックし「Indexにステージしたファイル」に「SUB.txt」を登録し、コミットに関するコメントに「subブランチにSUB.txtを追加」と入力し「コミット」をクリックします。
②「master」ブランチに切り替える
「master」ブランチを右クリックして「masterをチェックアウト」をクリックします。
「master」ブランチに〇が付きアクティブになりました。
「SUB.txt」が消えています。「master」ブランチの世界線では「SUB.txt」が存在しないんですね。ブランチを切り替えるとフォルダ、ファイルが一気に切り替わるのですごく便利です。
③「sub」ブランチを「master」ブランチにマージする
「sub」ブランチを右クリックして「現在のブランチにsubをマージ」をクリックします。
マージして良いか聞かれるので「OK」をクリックします。
「master」ブランチに「sub」ブランチで足した「SUB.txt」の追加が反映されているのでマージ成功です。
「master」ブランチにも「SUB.txt」が追加されました。
クローンを作成して、プッシュ、プルを行う
いよいよ本題です。「master」ブランチをクローンします。ドキドキ。
①「ターミナル」をクリック
「ターミナル」をクリックします。
②bareリポジトリを生成する
MINGW32のターミナルが表示されます。「cd ..」で1つ上のディレクトリに移動して「git clone –bare original original.git」というコマンドでbareリポジトリを作成します。
クローンするときはまずbareリポジトリを作成してクローン元としなければなりません。通常のリポジトリは作業用のファイルが沢山含まれておりクローンしようとすると失敗します。慣例的にbareリポジトリはフォルダ名の末尾に「.git」をつけます。
WinMergeで通常のリポジトリの管理フォルダ「C:\Git\original\.git」とbareリポジトリ「C:\Git\original.git」を比較しました。
比較結果が同一となっているフォルダがbareリポジトリに必要なフォルダです 他のフォルダは作業用になります configというファイルをダブルクリックすると…。
bareリポジトリ側はbare = trueになっていて、logallrefupdates = trueの行がなく、[ remote “origin”] url = C:\Git\original」が追加されています。
③クローン1を作成する
メニューから「新規/クローンを作成する」をクリックします。
1番目に先ほど作成したbareリポジトリを指定し、2番目にクローン先フォルダを指定し「クローン」をクリックします。
「clone」リポジトリが作成されました。
④「clone」リポジトリにファイルを追加して、クローン元のoriginal.git(bareリポジトリ)にプッシュする
「clone」リポジトリに「CLONE.txt」を作成します。
「CLONE」という文字列を入力して保存します。
「CLONE.txt」をコミットします。
「プッシュ」に1というマークが付きました。クローン元のoriginal.git(bareリポジトリ)と比較してcloneリポジトリのコミットが1つ多いことを意味します。クローン元にコミットを反映したいので「プッシュ」をクリックします。
「プッシュ」をクリックします。これでクローン元のoriginal.git(bareリポジトリ)に変更が反映されました。
⑤クローン2を作成する
メニューから「ファイル」→「新規/クローンを作成する」をクリックします。1番目にbareリポジトリを指定し、2番目にクローン先フォルダを指定し「クローン」をクリックします。
「clone2」リポジトリが作成されました。
⑥「clone2」リポジトリにファイルを追加して、クローン元のoriginal.git(bareリポジトリ)にプッシュする
「clone2」リポジトリに「CLONE2.txt」というファイルを作成します。
「CLONE2」という文字列を入力して保存します。
「CLONE2.txt」をコミットします。
「プッシュ」に1というマークが付きましたので「プッシュ」をクリックします。
「プッシュ」をクリックします。これでクローン元のoriginal.git(bareリポジトリ)に変更が反映されました。
「clone」リポジトリに戻り「プル」をクリックします。
「プル」をクリックします。これでクローン元のoriginal.git(bareリポジトリ)から変更が取り込まれたハズです。
「clone」リポジトリに「clone2」リポジトリで追加した「CLONE2.txt」が取り込まれました。
このようにクローンを複数作成して開発した場合でも、クローン元リポジトリをベースに、各自がプッシュとプルを行うことで同期がとれるのです。
まとめ
SourceTreeをインストールして、ローカルのgitリポジトリを作成しました。gitのコミット、マージ、クローン、プッシュ、プルを一通り試してみました。次回応用編ではGitHubの活用と、より高度なgitの使い方をご紹介します。
ITスキルを身につけると条件の良い転職が可能になる
ITスキルを身につけると条件の良い転職が可能になります。当ブログがそのキッカケになったら幸いです。