Git勉強会 2016 Gitで卒論を管理しよう回

Post on 16-Apr-2017

300 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

Transcript

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

top related