はじめに
今まで業務ではSubversionを使ってきましたが、今後はGitも使うことになると思われるのでとりあえず勉強を始めてみます。
会社のプロジェクトでは未だにSVNを使用しています。
社内ライブラリの一部はGitに移行していますがあまり触れていないのでGitに関しては経験が無い状態です。
SVNも社内ではプロジェクトの規模の拡大(人数やデータサイズの大きい大量のバイナリデータ)やインフラの影響(サーバーが非力)でそろそろ限界が来ているような気がします。
GitはGitでブランチ、マージが強力!、バイナリデータの管理には向かない?といった話も聞きますが、結局のところはケースバイケースということでしょうか。
バージョン管理の比較・選定などはまた別の機会にするとして、とにかくGitを始めてみます。
を目標に進めていきます。
まだ書き途中ですがGitをはじめる人の助けになればと思います。
以降は個人メモとして書いているので乱筆、乱文で申し訳ありません。
また、不備やご指摘などありましたらよろしくお願いします。
- はじめに
- Git
- Gitをはじめてみる
- インストール
- ローカルPCのみで触ってみる
- 1.リポジトリを作成してみる
- 2.addしてみる
- 3.コミット前の状態を確認してみる
- 4.addを取り消してみる
- 5.コミットしてみる
- 6.logを確認してみる
- 7.user,e-mail addressを変更してみる
- 8.変更を反映してみる
- 10.ファイルを変更してみる
- 11.コミットされているファイルとの差分を確認してみる
- 12.変更をコミットしてみる
- 13.日本語のファイルをaddしてみる
- 14.日本語のファイルをコミットしてみる
- 15.pushしてみる?どこに?
- 16.共有リポジトリを作成してみる
- 17.クローンしてみる
- 18.クローンした作業リポジトリにadd,commitしてみる
- 19.共有リポジトリにpushしてみる
- 20.Bさん(別の作業ディレクトリ)がクローンしてみる
- 21.Bさんがファイルを変更してみる
- 22.Bさんがadd,commit,pushしてみる
- 23.Aさん(元の作業リポジトリ)でpullしてみる
- 24.コンフリクトを起こしてみる
- 25.コンフリクトを解消する
- 26.作業リポジトリでブランチしてみる
- 27.master側にマージしてみる
- 28.ブランチを削除してみる
- TortoiseGit
- GitHub
- GitHub Desktop
- 参考
Git
で、Git。
「分散バージョン管理」というのがいまいちピンと来ていませんでしたが、SVNと大きな違いですかね?
多分こういことだと思われます。
SVNはサーバーのリポジトリに対してしかコミットができない。
というかサーバーのリポジトリをみんなでいじくるという前提。(※「集中型バージョン管理」と呼ばれている)
Gitはサーバーは共有リポジトリ、ローカルが作業リポジトリという概念で、ローカルにクローンを作成してそこに対してコミットやらブランチやら自由に行って作業し、最終的に共有リポジトリにコミットしていくという前提。
というのが「分散バージョン管理」という意味なのでしょうか!?
Gitの用語でちゃんと整理すると…
共有リポジトリ:ファイルサーバーなどに置かれたリポジトリでみんなで参照するリポジトリ。
作業ディレクトリ:ローカルの作業用リポジトリ。
コミット:作業ディレクトリに対してコミットすること。
クローン:ローカルに作業ディレクトを作成。
プッシュ:作業ディレクトリの変更内容を共有リポジトリに反映させる。
プル:共有リポジトリから最新版を取得。
リベース:理解して使わないととんでもないことになる可能性がある!?※注意が必要!
リポジトリの種類
リポジトリは2種類ある。
bareリポジトリ:ワーキングディレクトリを持たない。更新情報だけを持っている。
non-bareリポジトリ:ワーキングディレクトリを持つ。
SVNだと作業途中の状態やちょっとした変更などをコミットしづらかったりしますが、gitであれば作業ディレクトリでガシガシコミットしていって最終的なものだけを共有リポジトリにプッシュすれば良いと言うことになると思われます。
その時って作業ディレクトリの履歴とかも反映されるものなのかな?
作業ディレクトでプッシュしてないものとかって分かるのかな?
リポジトリの作成
git init or git init --bare --shared
作業ディレクトリの作成
ローカルの作業用リポジトリを作成する。
git clone https://username@????/????/repository
コミット
作業ディレクトリに対して追加・変更をコミットする。
この段階では共有リポジトリには反映されない。
共有リポジトリには影響ないのでガシガシ行ってもよい。
// コミット準備 // インデックスへの反映 git add <filename> or git add * // 実際にコミット // 作業ディレクトリのみに反映 git commit -m
プッシュ
// 共有リポジトリに反映 git push origin master
プル
共有リポジトリから最新版を取得。
git pull
ブランチ
マージ
- FastForword
- Non-FastForword
リベース(rebase)
マージの一種として扱うとよろしくないので別の項目として別の項目として書いておく。
Gitをはじめてみる
とにかく触ってみる。
まずは慣れるためにコマンドラインから始めてみます。
TortoiseGitはその後に触ります。
TortoiseGitのインストールのページではmsysGitをインストールしてと書いてあるがこれは別物?
→同じものでmsysGitは古い名称で現在はGit for windowsとのことなのでGit for windowsをインストールしておけばよい
インストール
下記のリンクを参考にインストールしてみます。
ページによって若干違いがありますがとても参考になりますので読んでください。
1.ダウンロードしてくる
現状の最新版は2.12.0。(2017/3/17)
Git-2.12.0-64-bit.exeをダウンロード。
2.インストーラを起動する
3.インストール先のフォルダを選択する
特に変更がなければそのまま進みます。
4.インストールするコンポーネントを選択する
ここもとりあえず変更なしで進めます。
5.スタートメニューへ追加するかどうか選択する
スタートメニューに追加したくない場合は下の Don’t create a Start Menu folder にチェックを入れます。
6.Gitをコマンドプロンプトから使うかどうか選択する
今回は一番上の Git Bash only を選択しました。
TortoiseGitを使用する場合も考慮する必要があればその時に再度見直します。
7.改行の扱いをどうするか選択する
参考ページでも意見が分かれているところです。
今回は一番下の Checkout as-is,commin as-is で進めます。
これは開発環境やプロジェクトによって都度検討してくことになると思われます。
インストール後に変更できるのか?
プロジェクトによってポリシーが異なった場合はどうやって運用していくのか?
8.ターミナルに何を使うか選択する
そのまま進めます。
9.キャッシュと2段階認証の設定有効/無効を選択する
そのまま進めます。
10.インストール中…
11.インストール完了
12.Git Bash起動
スタートメニューからGitBashを実行して起動を確認します。
ローカルPCのみで触ってみる
bashのコマンドでC:\直下でrm -rf *みたいなことをしない限りはPCがぶっ壊れたりはしないと思われるのでガシガシ触ってみたいと思います。
1.リポジトリを作成してみる
$ git init
.gitが作成されました。
2.addしてみる
TEST!!
$ git add test.txt
これはまだインデックスに登録しただけの状態です。
実際にはまだコミットはされていません。
3.コミット前の状態を確認してみる
$ git status
On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: test.txt
4.addを取り消してみる
$ git rm --cached test.txt On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) test.txt nothing added to commit but untracked files present (use "git add" to track)
これで先ほどインデックスへの登録が取り消されました。
5.コミットしてみる
先ほどのaddを再度行ってからコミットを行います。
$ git commit -m 'コミットのテスト ファイルの追加'
[master (root-commit) bba183d] コミットテスト ファイルの追加 Committer: xxx xxx <xxx@xxx.co.jp> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly. Run the following command and follow the instructions in your editor to edit your configuration file: git config --global --edit After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author 1 file changed, 1 insertion(+) create mode 100644 test.txt
なんか、「名前とe-mailアドレスを自動で取ってきたよ」といったようなメッセージが出ているようです。
このあたりもちゃんと設定してあげないとダメみたいです…
6.logを確認してみる
$ git log commit bba183d1ea41789b5737085e2e8c5b7f2fc54859 Author: xxx xxx <xxx@xxx.co.jp> Date: Tue Mar 28 14:53:49 2017 +0900 コミットテスト ファイルの追加
先ほどのコミットが確認できます。
7.user,e-mail addressを変更してみる
先ほどのコミットでメッセージが出ていたので、とりあえず仮のuser,addressを設定してみます。
$ git config --global user.name "takezoh" $ git config --global user.email "takezoh@hogehoge.co.jp"
内容を確認してみます。
$ git config --global --list user.name=takezoh user.email=takezoh@hogehoge.co.jp
8.変更を反映してみる
さっきのメッセージにあったコマンドを入れてみます。
$ git commit --amend --reset-author
なんかviエディタが起動しました。
懐かしいですが何もしないでとりえずZZ(Shift+zz)でエディタ終了します。
viコマンドについては以下のページを参考にしてみてください。
[master 840b9bd] コミットテスト ファイルの追加 1 file changed, 1 insertion(+) create mode 100644 test.txt
もう一度logを見るとAuthorの変更が反映されています。
$ git log commit 840b9bd0b5857262d28a07cc4add0056888b9ff1 Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Mar 28 15:56:59 2017 +0900 コミットテスト ファイルの追加
10.ファイルを変更してみる
test.txtを変更してテキストを追加します。
TEST!! テスト //←追加
11.コミットされているファイルとの差分を確認してみる
$ git diff diff --git a/test.txt b/test.txt index 3a3b7cb..4317b96 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ TEST!! +<83>e<83>X<83>g<81>I<81>I^M
日本語が正しく表示されない模様です…
bashの日本語対応が必要?
SJISはダメみたい…
というか別の対応が必要になりそう…
UTF-8であればとりえず表示はされました。
$ git diff diff --git a/test.txt b/test.txt index 3a3b7cb..f60fb19 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ TEST!! +テスト!!^M
12.変更をコミットしてみる
$ git add test.txt $ git status On branch master Your branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: test.txt $ git commit -m 'テキストを変更' [master 225112b] テキストを変更 1 file changed, 1 insertion(+) $ git log commit 225112be3ab8a1dda4d9e2cf567ebfc5dbcc2d3e Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 12:59:42 2017 +0900 テキストを変更 commit 840b9bd0b5857262d28a07cc4add0056888b9ff1 Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Mar 28 15:56:59 2017 +0900 コミットテスト ファイルの追加
13.日本語のファイルをaddしてみる
$ git add テスト.txt
$ git status On branch master Your branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup) Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: "\343\203\206\343\202\271\343\203\210.txt"
$ git diff --cached diff --git "a/\343\203\206\343\202\271\343\203\210.txt" "b/\343\203\206\343\202\271\343\203\210.txt" new file mode 100644 index 0000000..95eace3 --- /dev/null +++ "b/\343\203\206\343\202\271\343\203\210.txt" @@ -0,0 +1 @@ +<83>e<83>X<83>g<81>I<81>I^M
文字化けしているみたいです…
このあたりの設定などはまた後で調べたいと思います。
14.日本語のファイルをコミットしてみる
$ git commit -m '日本語ファイル名のファイルをコミット' [master 2090d55] 日本語ファイル名のファイルをコミット 1 file changed, 1 insertion(+) create mode 100644 "\343\203\206\343\202\271\343\203\210.txt"
$ git show commit 2090d55fb9c14fa3bbeef779fcc24c366955b5f6 Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 20:05:31 2017 +0900 日本語ファイル名のファイルをコミット diff --git "a/\343\203\206\343\202\271\343\203\210.txt" "b/\343\203\206\343\202\271\343\203\210.txt" new file mode 100644 index 0000000..95eace3 --- /dev/null +++ "b/\343\203\206\343\202\271\343\203\210.txt" @@ -0,0 +1 @@ +<83>e<83>X<83>g<81>I<81>I^M
15.pushしてみる?どこに?
最初に作成した作業リポジトリに対してaddやcommitを行ってきました。
これはあくまでも作業用のリポジトリにコミットしただけになります。
ん?でもこれだとpushしたり、pullしたりできないですよね?
$ git push fatal: No configured push destination. Either specify the URL from the command-line or configure a remote repository using git remote add <name> <url> and then push using the remote name git push <name>
push?どこに対して?
$ git remote
もちろんなにも表示されません。
そもそもプロジェクトで運用したり、GitHub等ではサーバーとかに共有リポジトリがあり、そこに対してpushしたり、pullしたりすることになります。
ですのでローカルPCで同様の環境を用意して操作を試してみたいと思います。
16.共有リポジトリを作成してみる
ローカルPCのみの環境で共有リポジトリを作成して、そのリポジトリに対していろいろやってみたいと思います。
とりあえずgit_test.git/というフォルダを作成します。(共有リポジトリは慣例的にフォルダ名に.gitを付けるみたい?)
そのフォルダ以下で共有リポジトリを作成します。
$ git init --bare --shared
bashの画面のフォルダ名の横に(BARE:master)というのが表示されるようになって以下のファイルが生成されました。
先ほどは.gitのみでしたが、今回はSVNのリポジトリ作成と同じようなファイルが作成されているようです。
config description HEAD hooks/ info/ objects/ refs/
17.クローンしてみる
workというフォルダを作成し、そのフォルダに共有リポジトリをクローンしてみます。
そのフォルダで以下のコマンドを実行します。
$ git clone /c/test/git_test.git
work以下にgit_test/というフォルダが作成され、その下に.git/が作成されました。
どうやらパスを指定しないとリポジトリ名から.gitが除かれたパスが作業ディレクトリとして割り当てられるらしいです…
クローンするパスを指定する場合はリポジトリの後にパスを指定します。
$ git clone /c/test/git_test.git ./git_test2
work以下にgit_test2/というフォルダが作成されました。
因みにwork以下を作業リポジトリにしたい場合は以下の通りです。
$ git clone /c/test/git_test.git ./
.gitが作成されました。
それ以外はもちろん空っぽの状態です。
18.クローンした作業リポジトリにadd,commitしてみる
いままでと同じ手順でファイルを追加、コミットします。
19.共有リポジトリにpushしてみる
$ git remote origin
クローンするとoriginという宛先が作られるようです…
$ git push origin Counting objects: 9, done. Delta compression using up to 8 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (9/9), 819 bytes | 0 bytes/s, done. Total 9 (delta 0), reused 0 (delta 0) To C:/product/git/git_test.git/ * [new branch] master -> master
無事にpushされたようです。
$ git pull origin Already up-to-date.
pullしてもupdate済となっているようです。
$ git log origin/master
共有リポジトリ側のログも確認してみます。
他の人のコミットがないので内容は同じとなっています。
20.Bさん(別の作業ディレクトリ)がクローンしてみる
Bさんを想定して別のフォルダで作業用にクローンしてみます。
$ git clone /c/product/git/git_test.git/ ./ Cloning into '.'... done.
.git/ test.txt テスト.txt
21.Bさんがファイルを変更してみる
TEST!! テスト!! hogehoge!! // ←追加
変更後にBさんの状態を確認する。
test.txtが変更されていることを確認します。
$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: test.txt no changes added to commit (use "git add" and/or "git commit -a")
一方、Aさんの方は変更がないので何も出ません。
$ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean
22.Bさんがadd,commit,pushしてみる
$ git add test.txt $ git commit -m 'Bさんの変更をコミット hogehoge追加しました' [master 4806924] Bさんの変更をコミット hogehoge追加しました 1 file changed, 1 insertion(+) $ git log -2 commit 4806924508c44f967053b3378aff3f930ca16ee8 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Thu Mar 30 12:16:19 2017 +0900 Bさんの変更をコミット hogehoge追加しました commit 2090d55fb9c14fa3bbeef779fcc24c366955b5f6 Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 20:05:31 2017 +0900 日本語ファイル名のファイルをコミット
Bさんの作業リポジトリにcommitします。
$ git push origin Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 367 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To C:/product/git/git_test.git/ 2090d55..4806924 master -> master
共有リポジトリにもpushします。
一方、Aさんは…
$ git log -2 commit 2090d55fb9c14fa3bbeef779fcc24c366955b5f6 Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 20:05:31 2017 +0900 日本語ファイル名のファイルをコミット commit 225112be3ab8a1dda4d9e2cf567ebfc5dbcc2d3e Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 12:59:42 2017 +0900 テキストを変更
もちろんまだ前のままです。
$ git log origin/master -2 commit 2090d55fb9c14fa3bbeef779fcc24c366955b5f6 Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 20:05:31 2017 +0900 日本語ファイル名のファイルをコミット commit 225112be3ab8a1dda4d9e2cf567ebfc5dbcc2d3e Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 12:59:42 2017 +0900 テキストを変更
この状態で共有リポジトリのlogをみても同じ状態なのはそういうもの?
23.Aさん(元の作業リポジトリ)でpullしてみる
$ git pull remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From C:/product/git/git_test 2090d55..4806924 master -> origin/master Updating 2090d55..4806924 Fast-forward test.txt | 1 + 1 file changed, 1 insertion(+)
無事に更新されました。
$ git log -2 commit 4806924508c44f967053b3378aff3f930ca16ee8 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Thu Mar 30 12:16:19 2017 +0900 Bさんの変更をコミット hogehoge追加しました commit 2090d55fb9c14fa3bbeef779fcc24c366955b5f6 Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Mar 29 20:05:31 2017 +0900 日本語ファイル名のファイルをコミット
この辺でもう一度以下の参考ページを見直してみてください。
一度操作して体験してから再度見直すと理解が深まると思います。
24.コンフリクトを起こしてみる
Aさん、Bさんのそれぞれのtest.txtを以下の様に変更してみます。
TEST!! テスト!! hogehoge!! Aさんの追加。 コンフリクト起きるかな?
TEST!! テスト!! hogehoge!! Bさんの追加。 コンフリクトが起きたらどうしよう...
それぞれの変更をまずは作業リポジトリにコミットします。
$ git commit -m 'Aさんの変更をコミット' [master 1726af7] Aさんの変更をコミット 1 file changed, 2 insertions(+) $ git log -2 commit 1726af73ee128a949e76c27a38bfdb05396ff04e Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:22:55 2017 +0900 Aさんの変更をコミット commit 4806924508c44f967053b3378aff3f930ca16ee8 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Thu Mar 30 12:16:19 2017 +0900 Bさんの変更をコミット hogehoge追加しました
$ git commit test.txt -m 'Bさんの変更をコミット' [master 42e9c92] Bさんの変更をコミット 1 file changed, 2 insertions(+) $ git log -2 commit 42e9c926f974ce74268c96c9b74a185a7199a2f2 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:26:00 2017 +0900 Bさんの変更をコミット commit 4806924508c44f967053b3378aff3f930ca16ee8 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Thu Mar 30 12:16:19 2017 +0900 Bさんの変更をコミット hogehoge追加しました
Bさんが先に共有リポジトリにpushします。
$ git push origin Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 426 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To C:/product/git/git_test.git/ 4806924..42e9c92 master -> master
無事にpushできました。
Aさんの作業リポジトリでpullします。
$ git pull remote: Counting objects: 3, done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From C:/product/git/git_test 4806924..42e9c92 master -> origin/master Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result.
コンフリクトが起きたみたいです…
マージされたtest.txtを見てみると…
TEST!! テスト!! hogehoge!! <<<<<<< HEAD Aさんの追加。 コンフリクト起きるかな? ======= Bさんの追加。 コンフリクトが起きたらどうしよう... >>>>>>> 42e9c926f974ce74268c96c9b74a185a7199a2f2
同じ個所の変更でコンフリクトが起きていることが分かります。
25.コンフリクトを解消する
コンフリクトしたファイルを適切に修正します。
今回はAさん、Bさん両方の修正を反映させます。
プログラムなどのコンフリクトはきちんと修正、変更箇所を確認してから適宜マージしましょう。
TEST!! テスト!! hogehoge!! Aさんの追加。 コンフリクト起きるかな? Bさんの追加。 コンフリクトが起きたらどうしよう...
コンフリクトが解消されたので再度作業リポジトリにcommitします。
$ git status On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: test.txt Untracked files: (use "git add <file>..." to include in what will be committed) test.txt.orig no changes added to commit (use "git add" and/or "git commit -a")
$ git add test.txt $ git status On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) All conflicts fixed but you are still merging. (use "git commit" to conclude merge) Changes to be committed: modified: test.txt Untracked files: (use "git add <file>..." to include in what will be committed) test.txt.orig
$ git commit -m 'コンフリクトを解消' [master c588972] コンフリクトを解消 $ git log -2 commit c5889725472ceba93e7ec3cffdd66e608b014fac Merge: 1726af7 42e9c92 Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:55:34 2017 +0900 コンフリクトを解消 commit 42e9c926f974ce74268c96c9b74a185a7199a2f2 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:26:00 2017 +0900 Bさんの変更をコミット
Aさんの変更もあわせて共有リポジトリにpushします。
$ git push Counting objects: 6, done. Delta compression using up to 8 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 679 bytes | 0 bytes/s, done. Total 6 (delta 2), reused 0 (delta 0) To C:/product/git/git_test.git/ 42e9c92..c588972 master -> master
$ git log origin/master -2 commit c5889725472ceba93e7ec3cffdd66e608b014fac Merge: 1726af7 42e9c92 Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:55:34 2017 +0900 コンフリクトを解消 commit 42e9c926f974ce74268c96c9b74a185a7199a2f2 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:26:00 2017 +0900 Bさんの変更をコミット
Bさんが再度pullしてみます。
$ git pull remote: Counting objects: 6, done. remote: Compressing objects: 100% (6/6), done. remote: Total 6 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (6/6), done. From C:/product/git/git_test 42e9c92..c588972 master -> origin/master Updating 42e9c92..c588972 Fast-forward test.txt | 2 ++ 1 file changed, 2 insertions(+)
マージされたファイルで更新されました。
26.作業リポジトリでブランチしてみる
ブランチを試してみます。
「分散バージョン管理」ということなので作業リポジトリ(ローカル環境)にブランチを作成してみます。
まずは現状のブランチの状態の確認をします。
$ git branch * master
*がついているmasterが現在のブランチを表しています。
ブランチを作成してみます。
local_branch_1というブランチを作成してみます。
$ git branch local_branch_1 $ git branch local_branch_1 * master
作成したブランチで作業を行うためにブランチを切り替えてみます。
$ git checkout local_branch_1 Switched to branch 'local_branch_1' $ git branch * local_branch_1 master
コンソールのフォルダ名の横の表示も(local_branch_1)に切り替わりました。
test.txtを変更してブランチ側にコミットしてみます。
TEST!! テスト!! hogehoge!! Aさんの追加。 コンフリクト起きるかな? Bさんの追加。 コンフリクトが起きたらどうしよう... ブランチ側で変更。 // ←追加
addしてcommitします。
$ git add test.txt $ git commit -m 'ブランチ側にコミット' [local_branch_1 beb3317] ブランチ側にコミット 1 file changed, 1 insertion(+)
無事にコミットできました。
logを確認してみます。
$ git log -3 commit beb3317e6ac54d1c80bdec218055cd5460e2dc96 Author: takezoh <takezoh@hogehoge.co.jp> Date: Thu Apr 6 12:37:33 2017 +0900 ブランチ側にコミット commit c5889725472ceba93e7ec3cffdd66e608b014fac Merge: 1726af7 42e9c92 Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:55:34 2017 +0900 コンフリクトを解消 commit 42e9c926f974ce74268c96c9b74a185a7199a2f2 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:26:00 2017 +0900 Bさんの変更をコミット
masterブランチに戻ってみます。
$ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'.
この時点で先ほど変更したtest.txtがmasterのコミットのファイルに置き換えられます。
TEST!! テスト!! hogehoge!! Aさんの追加。 コンフリクト起きるかな? Bさんの追加。 コンフリクトが起きたらどうしよう...
logをみるとブランチ側のコミットのログがありません。
$ git log -2 commit c5889725472ceba93e7ec3cffdd66e608b014fac Merge: 1726af7 42e9c92 Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:55:34 2017 +0900 コンフリクトを解消 commit 42e9c926f974ce74268c96c9b74a185a7199a2f2 Author: hogehoge <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:26:00 2017 +0900 Bさんの変更をコミット
27.master側にマージしてみる
ブランチ側でのコミットが完了したのでその変更をmaster側にマージしてみます。
$ git merge local_branch_1 Updating c588972..beb3317 Fast-forward test.txt | 1 + 1 file changed, 1 insertion(+)
test.txtを確認して変更が反映されていることを確認します。
これでmaster側へのマージが完了しました。
logも確認してみます。
$ git log -2 commit beb3317e6ac54d1c80bdec218055cd5460e2dc96 Author: takezoh <takezoh@hogehoge.co.jp> Date: Thu Apr 6 12:37:33 2017 +0900 ブランチ側にコミット commit c5889725472ceba93e7ec3cffdd66e608b014fac Merge: 1726af7 42e9c92 Author: takezoh <takezoh@hogehoge.co.jp> Date: Tue Apr 4 12:55:34 2017 +0900 コンフリクトを解消
28.ブランチを削除してみる
不要になったブランチを削除してみます。
$ git branch -d local_branch_1 Deleted branch local_branch_1 (was beb3317). $ git branch * master
TortoiseGit
インストール
下記のページを参考にインストールしてみます。
こちらもとても参考になりますので是非読んでください。
1.ダウンロードしてくる
現状の最新版は2.4.0.2です。(2017/4/7)
TortoiseGit-2.4.0.2-64bit.msiをダウンロードします。
日本語化パック(TortoiseGit-LanguagePack-2.4.0.0-64bit-ja.msi)もあわせてダウンロードします。
Git for Windowsはインストール済なのでTortoiseGitのインストールを開始します。
2.TortoiseGitのインストール
インストーラを実行します。
基本的には[Next>]で進めていけば問題ありません。
SSHクライアントの選択は一番上を選択しておきます。
カスタムセットアップも変更がなければそのまま進めます。
インストールが完了しました。
起動してみます。
日本語化パックをインストールしていないのでここはEnglishのまま進めます。
ユーザー情報もGit Bashで設定した情報が表示されているのでこのまま進めます。
これで初期スタートの設定も完了です。
3.日本語化パックのインストール
インストールが完了しました。
日本語に切り替えます。
右クリックのTortoiseGitのsettingを選択してください。
GeneralのLanguageを日本語に切り替えてください。
これで日本語への切り替えが完了しました。
TortoiseGitを触ってみる
1.Git Bashで作業していた環境を確認
緑色のチェックマークのアイコンが表示されていることを確認します。
※アイコン表示には時間がかかる場合があります。
※アイコンが表示されない場合はオーバーレイアイコンの最大数を超えている可能性があります。
2.pullしてみる
pullしてみます。
フォルダを右クリックしてTortoiseGitからプルを選択します。
そのまま進めます。
特に変更などがないので問題なく更新されました。
3.logを確認する
logを確認してみます。
Git Bashで作業した内容がそのまま表示されています。
4.変更をコミットしてみる
test.txtを変更してみます。
!マークの赤いアイコンが表示されました。
これはファイルに変更があることを表しています。
5.差分を確認する
TortoiseGitのマージツールが起動して差分を確認できました。
6.コミットしてみる
右クリックからGitコミットを選択します。
コミットするファイルの確認とコメントを入力します。
コミットが無事に完了しました。
7.pushしてみる
先ほどのコミットは作業リポジトリに対してのコミットです。
まだ共有リポジトリには反映されていません。
Bさんの環境でpullしてlogを確認しても先ほどの変更は反映されていません。
ですので先ほどのコミットを共有リポジトリにpushします。
※この時作業リポジトリは変更がないので全部緑マークになっています
※共有リポジトリとの差分はどうやって確認するだろう…
※共有リポジトリにpushしたかどうかを忘れてしまいそう…
※push忘れについてはいろいろな人が'工夫'で対処する方法が書かれている…
bashでの確認方法は以下の様です。
pushされていないコミットがあればlogに表示されます。
$ git log origin/master..master commit 317239762c05044fa189cde1548374b10459e9bd Author: takezoh <takezoh@hogehoge.co.jp> Date: Wed Apr 12 12:42:07 2017 +0900 TortoiseGitでコミット commit beb3317e6ac54d1c80bdec218055cd5460e2dc96 Author: takezoh <takezoh@hogehoge.co.jp> Date: Thu Apr 6 12:37:33 2017 +0900 ブランチ側にコミット
※TortoiseGitでpush忘れを確認する方法は?
※TortoiseGitでリモートのログを確認する方法は?
とりあえずpushしてみます。
pushが完了しました。
GitHub
いよいよGitHubを触ってみます。
GitHubのアカウント登録
まずはGitHubのアカウントの登録を行います。
ユーザー名とメールアドレス、パスワードを入力します。
プランを選択します。
Freeで進めます。
自分の経験にあった内容を選択してsubmitします。
登録が完了しました。
メールでメールアドレスの確認を求められるので確認しておきます。
早速、リポジトリを作成してみます。
無事にリポジトリが作成されました。
後は今まで通りの手順でGitHubの共有リポジトリで作業できるようになります。
GitHubに作成した共有リポジトリで作業
まずは先ほど作成した共有リポジトリをクローンします。
TortoiseGitで作業してみます。
URLに先ほど作成した共有リポジトリのURLを入力します。
ディレクトリはローカルのパスを指定してください。
これ以降はGitHubの共有リポジトリにpushできるようになります。
GitHub Desktop
GitHub Desktopをインストール
インストール中…
GitHubのアカウントでログイン
GitHubのアカウントを入力してログインします。
コンフィグを設定
今までに設定したユーザー名とメールアドレスを入力します。
インストール完了
リポジトリの追加
ここで今までに作成したリポジトリを追加してみましょう。
Desktopで表示されるようになりました。
とりあえずGitを触ってみて、TortoiseGitも触ってみて、GitHubまでたどり着くことができました。
もう少し色々と触ってみて随時更新していきたいと思います。
参考
TortoiseGit の基礎勉強 〜TortoiseGit によるバージョン管理を使う〜 TortoiseGitの使い方だがローカルPCで共有リポジトリ、作業リポジトリでの使い方が書かれている。