【※ 当記事は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」を作成します
中身はこんな感じ。※なんでもいいです
③コミット(登録)する
「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の使い方をご紹介します