Git 勉強会 卒論はGitで管理しましょう回 @kinmemodoki *卒論については104pageから 第⼆回
Git勉強会卒論はGitで管理しましょう回
@kinmemodoki
*卒論については104pageから
第⼆回
2参考資料(Git)
Git講習 masawada⽒http://sssslide.com/speakerdeck.com/masawada/gitjiang-xi-2014-dot-04-dot-15
Gitチュートリアルhttps://www.atlassian.com/ja/git
覚えていってほしいもの
1. gitの準備 init
2. コミット add & commit
3. 巻き戻し操作 rebase
4. ブランチ操作 brunch& marge
5. リモートリポジトリ操作 clone & pull& push
3はじめに
Whatisgit?
“Git” ってなんですか
Gitは、プログラムのソースコードなどの
変更履歴を記録・追跡するための
分散型バージョン管理システムである。
4Wikipedia[git]:http://ja.wikipedia.org/wiki/Git
Wikipediaより
Whatisgit?
プログラムの基礎っぽいところができたとき
5
次はチャット機能を追加しようかな
でもヘタに変えたら動かなくなるかも…
Whatisgit?
プログラムの基礎っぽいところができたとき
6
新しいディレクトリにコピーして編集しよう!!
Whatisgit?7
どれが最新…?⼀個前のはどれ…?
Whatisgit?8
ソースを特定の時期の状態にもどしたい…
Whatisgit?9
チーム開発で最新ファイルの共有をしたい…
ソースコード編集して新機能追加しました
お前が編集したのは前バージョンのものだ!
Whatisgit?10
そんな問題を解決!
Whatisgit?11
• コードの状態を保存
• 更新した内容がわかる
• チームでの開発だともっと便利
12
0.gitの準備
Windows
1.http://git-scm.com/downloads からインストール
130.gitの準備
2.Git Bashを起動
Mac
1.http://git-scm.com/downloads からインストール
140.gitの準備
Mac2.pkgファイルをインストール3.shファイル(シェルスクリプト)使ってパス設定
150.gitの準備
確認
「git --version」を⼊⼒し
versionが表⽰されたら完了
160.gitの準備
17
1.プログラミングをする前
18
$ git init <directory>
1.プログラミングをする前
新しい作業ディレクトリ
.gitフォルダを含む新規フォルダが作成される
+
.git
19
$ git init
1.プログラミングをする前
カレントディレクトリ .git
カレントフォルダに.gitディレクトリが作成される
+
データの編集履歴の保存場所昔の状態に戻りたい時に参照
201.プログラミングをする前
.git
リポジトリ
データの編集履歴の保存場所昔の状態に戻りたい時に参照
211.プログラミングをする前
.git
リポジトリ
データベース的な感じ
git管理するファイルの例外を登録(卒論pdfや外部ライブラリなど...)
221.プログラミングをする前
.gitignore
情報漏えいや履歴データの節約になる
23
2.コード編集後
242.コード編集後
ワークツリー
編集履歴をリポジトリに保存する流れ
ワークツリーでファイルを追加/編集/削除(作業ディレクトリ)
252.コード編集後
ワークツリー インデックス
編集履歴をリポジトリに保存する流れ
リポジトリに登録したいファイルを追加(データベース)
262.コード編集後
ワークツリー リポジトリインデックス
編集履歴をリポジトリに保存する流れ
追加したファイルをリポジトリに登録
272.コード編集後
編集履歴をリポジトリに保存する流れ
add commit
ワークツリー リポジトリインデックス
28
[filename]をインデックスに登録
$ git add [filename]
2.コード編集後
ワークツリー インデックス
add
29
作業ディレクトリ追加/変更されたファイルをadd
$ git add .
2.コード編集後
ワークツリー インデックス
add
30
ワークツリーに追加/変更/削除されたファイルをadd
$ git add -A
2.コード編集後
ワークツリー インデックス
add
312.コード編集後
作業ディレクトリ リポジトリステージング
エリア
編集履歴をリポジトリに保存する流れ
add
編集したファイルを登録する準備ができました
32
$ git commit
リポジトリステージングエリア
commit
登録されたファイルをリポジトリにすべて保存
2.コード編集後
commit後のコメント⼊⼒(vim)
332.コード編集後
何の更新をしたかをコメント
34
$ git commit –m “comment”
リポジトリワークツリー
commit
コメントをしつつコミット
2.コード編集後
リポジトリに登録完了!(これで過去のファイルを復元できる!)
35
リポジトリ登録完了
36
$ git status
ファイルのadd状態を表⽰
2.コード編集後
ワークツリー インデックス
37
リポジトリのログを表⽰
$ git log
2.コード編集後
リポジトリlog
382.コード編集後
リポジトリの“詳しい”ログを表⽰
コメント
⽇付
更新者
39
リポジトリの “短い”ログを表⽰
$ git log --oneline
2.コード編集後
リポジトリlog
402.コード編集後
リポジトリの“簡易的”ログを表⽰
コメント
Tips
41
42
What isstaging?
インデックスっている?
4343
インデックスっている?
編集ファイル
リポジトリ
commit
What isstaging?
4444
チャット機能&履歴閲覧機能を実装したぞ!!
chat.js history.js
チャット機能を付けるために変更したファイル
What isstaging?
4545
chat.js
リポジトリ
history.js
まとめてcommit
「chat&history機能つけました」
What isstaging?
4646
リポジトリlog
3/14「chatとhistory機能つけた」3/12「基本機能つけた」
New
Old
What isstaging?
4747
その後…
history機能でバグ発⾒
「history機能を実装し直しだ…」 リセットしよう!
What isstaging?
4848
リポジトリlog
3/14「chatとhistory機能つけた」3/12「基本機能つけた」
イマココ
What isstaging?
4949
リポジトリlog
3/14「chatとhistory機能つけた」3/12「基本機能つけた」⼀個前
「chat機能も実装し直しじゃねーか…」
What isstaging?
5050http://protectasapporo.blog.fc2.com/blog-entry-205.html
What isstaging?
5151
なんてことになる前に!
http://protectasapporo.blog.fc2.com/blog-entry-205.html
What isstaging?
5252
chat.js リポジトリ
history.js
commit
「chat機能つけました」
リポジトリ
commit
「history機能つけました」
commitはしっかり分けましょう
※分け⽅はいろいろ
commitしたらhistoryを編集
What isstaging?
5353
チャット機能をcommitする前にhistory.js作っちゃったぞ!
history.jsは消さなきゃダメ…?
What isstaging?
5454
インデックス
What isstaging?
5555
commitchat.js
history.js
「chat機能つけました」
add
addしない
What isstaging?
5656
commitchat.js
history.js
「history機能つけました」
add
What isstaging?
5757
What isstaging?
インデックス
良いcommitをするための整理場所
5858
Tips
ワークツリー リポジトリインデックス
編集履歴をリポジトリに保存する流れ
add commit
gitできるようになったこと・リポジトリに登録できるようになった
59おさらい
でてきたコマンド
・git init 初期準備
・git add 登録するファイルを選ぶ・git commit リポジトリへ登録
・git status add状態を表⽰・git log commitの履歴を表⽰
60
3.巻き戻したいとき
613.巻き戻したいとき
Tips:コミットの指定⽅法
3/14「4thcommit」 ------>HEAD
3/12「3rdcommit」 ------>HEAD^
3/10「2ndcommit」 ------>HEAD^^
3/8「1st commit」 ------>HEAD^^^
New
Old
62
$ git reset (option) (commit ID)
3.巻き戻したいとき
↑ commitID(commitIDは HEAD^^でも指定できる)
633.巻き戻したいとき
git reset (option)何を戻すのかを指定可能
作業ディレクトリ インデックス リポジトリ(オプション)
--hard
(nooption)
--soft 今のまま
今のまま
今のまま
643.巻き戻したいとき
間違えてaddした!!
65
ステージングファイルを前回のコミット時に
$ git reset HEAD
3.巻き戻したいとき
ステージングファイル
663.巻き戻したいとき
過去に戻りたい!!
67
$ git reset --hard HEAD^^
3.巻き戻したいとき
1st commitHEAD^^
2ndcommitHEAD^
latestcommitHEAD
ワークツリー
683.巻き戻したいとき
間違えてcommitした!!
69
直前のコミットをキャンセルしてコミット
$ git commit --amend
3.巻き戻したいとき
新規コミット前コミット内容
70
前のコミットをキャンセルしてコミット
$ git commit --amend
3.巻き戻したいとき
新規コミット前コミット内容
上書き保存
71
4.新機能を追加したいとき
724.新機能を追加したいとき
ブランチbrunch枝
734.新機能を追加したいとき
ブランチ(branch)
複数の機能を並⾏して作成したりリリース版やhotfix版作ったりするときに利⽤
チャット機能
画像アップ機能
主機能commit
commit
74
$ git branch [name]
name
mastercommit デフォルトは「master」
ブランチを新規作成
4.新機能を追加したいとき
75
$ git checkout [name]
name
mastercommit
編集中のブランチを変更
4.新機能を追加したいとき
編集中
76
$ git merge [name]
name
mastercommit
ブランチを統合
4.新機能を追加したいとき
編集中
commit
774.新機能を追加したいとき
ブランチの流れ
作成 移⾏ 編集 保存 移⾏ 統合
mastercommit
編集中
784.新機能を追加したいとき
ブランチの流れ
chat
mastercommit
作成 移⾏ 編集 保存 移⾏ 統合
$git brunchchat
編集中
794.新機能を追加したいとき
ブランチの流れ
chat
mastercommit
作成 移⾏ 編集 保存 移⾏ 統合
$git checkoutchat
編集中
804.新機能を追加したいとき
ブランチの流れ
chat
mastercommit
作成 移⾏ 編集 保存 移⾏ 統合
$vimsample.javaとか
編集中
814.新機能を追加したいとき
ブランチの流れ
chat
mastercommit
作成 移⾏ 編集 保存 移⾏ 統合
$git commit
編集中commit
824.新機能を追加したいとき
ブランチの流れ
chat
mastercommit
作成 移⾏ 編集 保存 移⾏ 統合
$git checkoutmaster
編集中
commit
834.新機能を追加したいとき
ブランチの流れ
chat
mastercommit
作成 移⾏ 編集 保存 移⾏ 統合
$git mergechat
編集中
commit
844.新機能を追加したいとき
コンフリクト(マージの衝突)
854.新機能を追加したいとき
コンフリクト(マージの衝突)
864.新機能を追加したいとき
コンフリクト同じファイルに違う編集をした状態でマージしたとき
TAKENOKOisGOD
KINOKOisGOD
主機能
commit
commit
commit
コンフリクトのエラー対処法
87
<<<<<<<HEAD
echo("TAKENOKOisGOD");=======echo("KINOKOisGOD");>>>>>>>kinoko
コンフリクト状態のファイルを編集してコミット
4.新機能を追加したいとき
コンフリクトのエラー対処法
88
<<<<<<<HEAD
echo("TAKENOKOisGOD");=======echo("KINOKOisGOD");>>>>>>>kinoko
コンフリクト状態のファイルを編集してコミット
消去
4.新機能を追加したいとき
コンフリクトのエラー対処法
89
echo("TAKENOKOisGOD");
コンフリクト状態のファイルを編集してコミット
TAKENOKOisGOD
4.新機能を追加したいとき
5.リモートでリポジトリを使う
90
915.リモートでリポジトリを使う
ひとりでバージョン管理するには
925.リモートでリポジトリを使う
みんなでバージョン管理するには
要:みんながアクセスできるリポジトリ
R
935.リモートでリポジトリを使う
R リモートリポジトリ
それぞれの計算機にあるローカルなリポジトリとは別物の
共有リポジトリ
945.リモートでリポジトリを使う
R リモートリポジトリ
955.リモートでリポジトリを使う
作業ディレクトリ リポジトリステージング
エリア
add commit
編集履歴をリポジトリに保存する流れ
965.リモートでリポジトリを使う
作業ディレクトリ リポジトリステージング
エリア
add commit
R
pullpushリモート
リポジトリ
リモートリポジトリからローカルリポジトリを新規作成してコピー
+リモートリポジトリの登録
975.リモートでリポジトリを使う
$ git clone [URL]
R
URL:GitHubのコピーしたいリポジトリの右下を参照(HTTPSの場合)
985.リモートでリポジトリを使う
$ git clone [URL]
リモートリポジトリを変更する場合URL:GitHubのコピーしたいリポジトリの
右下を参照(HTTPSの場合)
995.リモートでリポジトリを使う
$ git remote set-url origin [URL]
ローカルリポジトリ変更履歴をリモートリポジトリへアップロード
1005.リモートでリポジトリを使う
$ git push
R
リモートリポジトリ変更履歴をローカルリポジトリへダウンロード
1015.リモートでリポジトリを使う
$ git pull
R
覚えていってほしいもの
1. gitの準備 init
2. コミット add & commit
3. 巻き戻し操作 rebase
4. ブランチ操作 brunch& marge
5. リモートリポジトリ操作 clone & pull& push
102まとめ
以上!
103
104素材元
HUMANPICTOGRAM2.0
http://pictogram2.com/
git
http://git-scm.com/downloads/logos/
105
本題
卒論でGitを管理しよう!!!
106参考資料
参考: http://fromatom.hatenablog.com/entry/2014/02/09/001136
107
筆者視点• 論⽂のバックアップができる
校閲者視点• 誰がどこまで校閲したのかわかる
(先⽣がここまで⾒てるなら、ここから読めばいっか...)
なぜGit管理するのか
108論⽂作成の流れ
master"init"
とりあえず初期コミット
109
master
$ git branch 1st
論⽂作成の流れ
1st
"init"
110論⽂作成の流れ
節を書くor修正する毎にコミットコメントは”add(節番号)”、”fix(節番号)” +αにしましょう
master
1st
"init"
"add1.1" "add1.2"
111論⽂作成の流れ
git pushして⼤学院⽣に校閲してもらう+pdfをWebDavにアップする
master
1st
"init"
"add1.1" "add1.2"
112論⽂作成の流れ
校閲する約束をとりつけたら空コミットで校閲者を記載校閲中、(やる気があれば)待たずに進める
master
1st
"init"
"add1.1" "add1.2"
"revisedby~~"
113
$ git commit --allow-empty -m "revised by (校閲者)"
論⽂作成の流れ
master
1st
"init"
"add1.1" "add1.2"
"revisedby~~"
114論⽂作成の流れ
masterブランチにマージmasterにコミットが無いとマージコミットは発⽣しません
master"init"
"add1.1" "add1.2"
"revisedby~~"
115論⽂作成の流れ
以降、別ブランチに切って修正+加筆 ...
master"init"
"add1.1" "add1.2"
"revisedby~~"
"fix1.1" "add2.1"2nd
116
前項(master)と現項(Nst)をgit checkoutで⾏き来できる
(必要なければ全部masterで良いかも)
(校閲の際に前回の校閲との差分も⾒やすそう)
ブランチを切る理由
ブランチ分ける必要ある?
117
実際にやってみよう!
118
1. git clone で論⽂テンプレートをダウンロード
2. リモートリポジトリにgitlabのリポジトリを設定
3. 0thブランチを作成
4. document/introduction.tex の1.1節 を編集
5. コメントつけてコミット
6. リモートリポジトリにプッシュ
7. マージ
やることリスト
119