【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です。
インストール方法と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の使い方をご紹介します。