計算機科学実験及演習3 - lab3.kuis.kyoto-u.ac.jptakase/le3a/2019hw3-git.pdf · 2...
TRANSCRIPT
計算機科学実験及演習3ハードウェア「Gitの使い方」
京都大学情報学科計算機科学コース
2
課題提出等に用いるGit・GitLabの使い方を学ぶ
① Gitの概要バージョン管理システムとGitの基本概念を紹介
② Gitの使い方Gitの基本的なコマンドの説明
③ GitLabの設定本実験で使用するリモートリポジトリGitLabの設定
④ 実験3HWでのGitLabの使い方本実験でのGitLabの運用方針を説明
概要
②Gitの概要
4
PCでの作業で起こりうること
● エラーを含んだ状態でプログラムを保存してしまった。- 動作していたときの状態に戻したい。
● レポートのファイルを間違って削除してしまった。- 元に戻したい。
● 1週間ぶりに開くファイル、以前どんな編集をしたのか忘れてしまった。
- 何をしたのか記録しておきたい。● 二人で1つのファイルを編集してしまい、一方の人がした編集が反映されなかった。
Gitの概要
5
バージョン管理システム
● ファイルの変更履歴を記録し共同編集を支援する- こんなことができるo ファイルを過去の状態に戻す
o 編集内容のメモ
o 他人が編集したファイルを上書きしようとすると警告を出す
Gitの概要
6
Gitはバージョン管理システムの1つ
● 分散型のバージョン管理システム。● Linuxのソースコードを管理するためにLinus Torvalds自身が開発。
● 実験3HWではGitでバージョン管理を行う(必須)
● レポートの提出もGitを使う(後で説明)
Gitの概要
7
Gitによるバーション管理の方法
● Gitはディレクトリ単位で管理を行う。
● Gitで管理されるディレクトリには3つのエリアが作られる。
● ワーキングディレクトリ、ステージングエリア、リポジトリ
Gitの概要
ワーキングディレクトリ
ステージングエリア
リポジトリ
Directory
8
ワーキングディレクトリ
● Gitで管理しているディレクトリそのもの。
● ドキュメントやプログラムファイルの作成などの作業を行う場所。
Gitの概要
ワーキングディレクトリ
ステージングエリア
リポジトリ
ファイルA
ファイルB
Directory
Directory
9
ステージングエリア
● 変更履歴として保存するファイルを選択し、置いておく場所。
● ワーキングディレクトリのファイルの中から意味のあるひとまとまりのファイルを選びステージングする。
Gitの概要
ワーキングディレクトリ
ステージングエリア
リポジトリ
ファイルA
ファイルB
ファイルA
Directory
10
リポジトリ
● 変更履歴を記録しておく場所● ステージングエリアに置かれているファイルを、変更履歴として保存する。リポジトリに変更履歴を保存することを
“コミット”という。
Gitの概要
ワーキングディレクトリ
ステージングエリア
リポジトリ
ファイルA
ファイルB
ファイルA
コミット1
コミット
ファイルAの21⾏⽬を変更
11
コミット
● コミットをする度にリポジトリに変更履歴が記録されていく。
● いつでも、任意のコミットに戻ることができる。
Gitの概要
コミット1 コミット2 コミット3 コミット4
ファイルAの21⾏⽬を変更
ファイルBの30⾏⽬を変更
ファイルCを追加
ファイルAの46⾏⽬を変更
…
12
ブランチ
● 変更履歴の流れを分岐することで並行での編集を支援● あるブランチへの変更は、他のブランチに影響しない● ブランチ同士の統合(マージ)も可能
Gitの概要
分岐 統合
追加機能開発ブランチ
メインブランチ
13
Gitの概要
リモートリポジトリ
● サーバー上に存在し、複数の人が参照することのできるリポジトリをリモートリポジトリという。
リモートリポジトリ
ローカルリポジトリ
ローカルリポジトリ
ローカルリポジトリ
14
Gitの概要
プッシュとフェッチ
● ローカルリポジトリの内容をリモートリポジトリにアップロードすることをプッシュという。
● リモートリポジトリの内容をローカルリポジトリにダウンロードしてくることをフェッチという。
リモートリポジトリローカルリポジトリ
プッシュ
フェッチ
③Gitの使い方
16
Gitの初期設定
コマンドラインの設定
$ git config --global user.name “KATO KAZUNARI"$ git config --global user.email "[email protected]"
Gitの使い方
• Gitの操作はターミナル上で行う。
• git config --globalコマンドによりユーザー名とメールアドレスを登録する。
17
Gitリポジトリを初期化する
Gitの使い方
git init
現在のディレクトリをGitリポジトリとして初期化する。
18
Gitリポジトリを初期化する
Gitの使い方
gittest
ワーキングディレクトリ
ステージングエリア
リポジトリ
• gittestディレクトリがGitリポジトリとして認識される。• ディレクトリには.gitディレクトリが作成されている。
$ mkdir gittest$ cd gittest$ git initInitialized empty Git repository in <ディレクトリ> /gittest/.git
19
ディレクトリ内にテキストファイルを作成する。
Gitの使い方
gittestワーキング
ディレクトリステージング
エリアリポジトリ
dog.txt
ワーキングディレクトリにdog.txtが追加される。
$ echo “bow wow” >> dog.txt
20
現在のディレクトリ内の状態を確認する
Gitの使い方
$ git status
ディレクトリ内の状態を確認する。
git status
21
現在のディレクトリ内の状態を確認する
Gitの使い方
$ git statusOn branch master
Initial commit
Untracked files:(Use “git add<file>…” to include what will commited)
dog.txt
nothing added to commit but untracked files present(use “git add” to track
• 新しく作成したファイル(dog.txt)がUntracked files:の⼀覧に表⽰される。• Untracked filesには⼀度もステージングしたことがないファイルが表⽰される
22
指定したファイルをステージングエリアへ追加する
Gitの使い方
<ファイル名>をステージングエリアに追加する。
$ git statusgit add <ファイル名>
23
指定したファイルをステージングエリアへ追加する
Gitの使い方
gittestワーキング
ディレクトリステージング
エリアリポジトリ
dog.txt dog.txt
$ git add dog.txt
• dog.txtがステージングエリアに追加される。
24
ステージングエリア追加後の状態を確認する
Gitの使い方
$ git status…Changes to be commited:(Use “git rm –cached <file>…” to unstage)
new file: dog.txt
• ステージング後に、再びgit statuコマンドにより状態を確認する。• Changes to be commited:の⼀覧にdog.txtがnew fileとして表⽰されている。ス
テージングエリアに新たに加えられたことを⽰している。
25
ステージングされたファイルをコミットする。
Gitの使い方
ステージングされているファイルをコミットする。-mオプションをつけると1⾏のコミットコメントをつけることができる。
$ git statusgit commit -m <コメント>
26
ステージングされたファイルをコミットする。
Gitの使い方
gittestワーキング
ディレクトリステージング
エリアリポジトリ
dog.txt dog.txt 2c2adf7
create dog
$ git commit –m “create dog”[master (root-commit) 2c2adf7] create dog1 file changed, 1 insertion(+)
• create dogというコメントをつけてコミットする。• ステージングされていたdog.txtがコミットされる。
27
Gitの使い方
gittest
ワーキングディレクトリ
ステージングエリア
リポジトリ
dog.txt
2c2adf7..
cat.txt
dog.txtの変更と、新規ファイルの追加。
create dog
$ echo “mew” >> cat.txt$ echo “wan wan” >> dog.txt
• dog.txtを編集し、新たにcat.txtを追加する。
28
Gitの使い方
dog.txtの変更と、新規ファイルの追加。
$ git statusOn branch masterChanges not staged for commit:…
modified: dog.txtUntracked files:…
cat.txt
• Changes not staged for commitには過去にステージングしたことがあり、かつ最新のコミットから変更されているファイルが表⽰される。
• Untracked filesにはcat.txtが表⽰される。
29
Gitの使い方
gittest
ワーキングディレクトリ
ステージングエリア
リポジトリ
dog.txt
2c2adf7..
cat.txt
変更
新規
dog.txtの変更と、新規ファイルの追加。
create dog
30
Gitの使い方
gittestワーキング
ディレクトリステージング
エリアリポジトリ
dog.txt
550dfb..
cat.txt
• dog.txtの変更とcat.txtの追加が⼀つの変更としてコミットされる。• git addのファイル指定ではワイルドカードが使える。• また “.”を指定すると変更があった全てのファイルをステージングする。
変更
新規
dog.txtA3cb0...
Commit all files
全ての変更をコミット。
cat.txt
$ git add *.txt$ git commit –m “commit all files”
31
Gitの使い方
コミットの履歴を確認する。
コミットの履歴を確認する
$ git status git log
32
Gitの使い方
$ git logcommit 550dfb1f4de340c3abe04549f52c4a6598ad4cbfAuthor: Kazunari Kato<[email protected]>Date: Fri Apr 27 14:01:23 2018 +0900
commit all files
commit 2c2adf7291e16fd4301a625c8ac5589edc703f83Author: Kazunari Kato<[email protected]>Date: Fri Apr 27 13:58:26 2018 +0900
create dog.txt
• コミット履歴が新しいものから順番に表⽰される。• 1⾏⽬の⽂字列はコミットIDといって、コミットを識別するためのもの。
コミットの履歴を確認する
33
Gitの使い方
コミットの履歴を確認する
2c2adf.. 550dfb..
Create dog.txt commit all files
34
以前のコミットの状態に戻す
Gitの使い方
ファイルを<commit id>で指定したコミットの状態に戻す。
$ git statusgit reset --hard <commit id>
35
Gitの使い方
$ echo “tweet” >> bird.txt$ echo “meow meow” >> cat.txt$ git status// bird.txtの追加とcat.txtが変更されているメッセージが出る。$ git reset --hard //コミットIDを省略すると最新のコミットに戻る$ git status// 変更が何もないというメッセージがでる。
• 新たにbird.txtを追加し、cat.txtを変更する。• git reset --hardコマンドで、ファイルを最新のコミットの状態に戻す。• lessコマンドなどで、ファイルを確認すると、元に戻っている。
以前のコミットの状態に戻す
36
ブランチ一覧を表示する。
Gitの使い方
作成されているブランチの⼀覧を表⽰する。
$ git statusgit branch
37
ブランチを利用する-ブランチ一覧を表示する。
Gitの使い方
$ git branch* master
masterブランチ
2c2adf.. 550dfb..
• 作成済みのブランチが表⽰される。(masterブランチは最初から存在している。)
• *は現在選択(チェックアウト)されているブランチを⽰している。
38
新しくブランチを作成する
Gitの使い方
新しくブランチを作成する。
git branch <ブランチ名>
39
新しくブランチを作成する
Gitの使い方
$ git branch mod-cat$ git branch* mastermod-cat
• mod-catというブランチを作成する。• git branch で確認するとmod-catブランチが作成されているのがわかる。
masterブランチ
2c2adf.. 550dfb..
mod-catブランチ
40
ブランチを選択する
Gitの使い方
<ブランチ名>で指定したブランチを選択する。
git checkout <ブランチ名>
41
ブランチを選択する
Gitの使い方
$ git checkout mod-catSwitched to branch ‘mod-cat’$ git branchmaster
* mod-cat
mod-catブランチを選択して、git branchコマンドでmod-catが選択されていることを確認する。
masterブランチ
2c2adf.. 550dfb..
mod-catブランチ
42
mod-catブランチでコミットする
Gitの使い方
$ echo “nya-” >> cat.txt$ git add cat.txt$ git commit –m “mod cat”$ git log --online* 3b503ba mod cat* 55d0fb1f commit all files* 2c2adf72 create dog
• cat.txtを変更して、コミットする。• git log コマンドに--onelineオプションをつけると履歴を省略形で表⽰
する。• 3つのコミットがあることを確認できる。
43
mod-catブランチでコミットする
Gitの使い方
• 作成されたコミットはmod-catブランチで更新される。• masterブランチは変わらずに550dfb..のコミットを保持している。
masterブランチ
2c2adf.. 550dfb..mod-catブランチ
3b503..
44
masterブランチを更新する
Gitの使い方
$ git checkout master$ echo “waon” >> dog.txt$ git add dog.txt$ git commit –m “mod dog”$ git log* e6fa391 mod dog* 55d0fb1 commit all files* 2c2adf7 create dog
• masterブランチを選択してdog.txtを変更しコミットする。• コミット履歴を確認するとmod-catブランチでのコミットは含まれてお
らず、masterブランチで⾏なったコミットのみが表⽰される。
45
masterブランチでコミットを行う
Gitの使い方
masterブランチ
2c2adf.. 550dfb..mod-catブランチ
3b503..
ab502c..
• 新しく作成されたコミットはmasterブランチで更新される。• mod-catブランチで⾏われた変更はmasterブランチには影響されない。
46
ブランチを統合(マージ)する
Gitの使い方
現在選択されているブランチに<ブランチ名>で指定したブランチを統合(マージ)する。
git merge <ブランチ名>
47
masterブランチにmod-catブランチを統合する
Gitの使い方
$ git checkout master$ git merge mod-cat
• masterブランチにチェックアウトして、mod-catブランチをマージする。
masterブランチ
2c2adf.. 550dfb..
mod-catブランチ3b503..
ab502c..
48
masterブランチにmod-catブランチを統合する
Gitの使い方
Merge branch ‘mod-cat’
#........//省略
• マージコミットを⾏うためのエディタが⽴ち上がるので、必要に応じてコメントを修正し、保存・終了(:wqをタイプ)する。
49
masterブランチにmod-catブランチを統合する
Gitの使い方
$ git log --oneline --graph//省略
• git logコマンドに--graphオプションをつけると、履歴の分岐をグラフィカルに表⽰する。
masterブランチ
2c2adf.. 550dfb..
3b503..
ab502c.. bd9c80..
50
ブランチを破棄する
チュートリアル2
git branchに-dオプションをつけると<ブランチ名>で指定したブランチを破棄する。
git branch -d <ブランチ名>
51
ブランチを破棄する
Gitの使い方
$ git branch –d mod-catDelete branch mod-cat (was 23e1793)
• 不必要となったブランチは消去する。
52
ローカルリポジトリの内容をリモートリポジトリにプッシュする
Gitの使い方
git push <エイリアス> <ブランチ>
git remote add <エイリアス> <URL>
<URL>を<エイリアス>という名前でリモートリポジトリとして登録する。
<エイリアス>のリモートリポジトリにローカルの<ブランチ>をプッシュする。
53
リモートリポジトリにプッシュ
Gitの使い方
$ git remote add origin http://ユーザ名@130.54.13.121:7000/ユーザ名/プロジェクト名.git$ git push -u origin master
● リモートリポジトリとしてURLをoriginというエイリアス名で設定する。
● originのリモートリポジトリにmasterブランチをプッシュする。
リモートリポジトリ
ローカルリポジトリ
プッシュ
ddc34...
Create cat.txt
ddc34...
Create cat.txt
54
リモートリポジトリの内容をローカルリポジトリにコピーする。
Gitの使い方
git clone <URL><URL>のリモートリポジトリの内容をローカルにコ
ピーする。
55
リモートリポジトリをクローン
Gitの使い方
$ git clone http://ユーザ名@130.54.13.121:7000/ユーザ名/プロジェクト名.git
● リモートリポジトリの完全なコピーを作成する。
● ローカルリポジトリにプロジェクトがないときに使用。
リモートリポジトリ
ローカルリポジトリ
クローン
ddc34...
Create cat.txtddc34...
Create cat.txt
56
リモートリポジトリの内容でローカルリポジトリを更新する。
Gitの使い方
git pull <エイリアス> <ブランチ><エイリアス>のリモートリポジトリの内容でローカル
の<ブランチ>を更新する。
57
ローカルリポジトリを更新
GitLab
$ git clone http://ユーザ名@130.54.13.121:7000/ユーザ名/プロジェクト名.git
● リモートリポジトリの開発がローカルリポジトリよりも進んでいるとき、リモートリポジトリの内容でローカルリポジトリを更新する。
リモートリポジトリ
ローカルリポジトリ
pull
ddc34...
Create cat.txt
550dfb...ddc34...
Create cat.txt
②GitLabの設定
59
GitLabの設定
※学外からはアクセスできません
GitLabのアドレス● 本演習ではリモートリポジトリとしてGitLabを使用する
http://130.54.13.121:7000
60
GitLabへのログイン
● Username: 学生番号、Password: 学生番号でログイン
GitLabの設定
61
アカウント設定
● パスワードの設定画面が出るので、パスワードを変更する。
GitLabの設定
62
アカウント設定の修正
● 変更したパスワードでもう一度ログインする。
● “ Profile”タブからメールアドレスを変更
● ページの一番下にある “Update profile settings”をクリック。
● 設定したアドレスに届くメールで承認すると変更完了。
GitLabの設定
63
リモートリポジトリの作成
● ページ右上のメニューから “New project” (+のアイコン)をクリック。
GitLabの設定
64
リモートリポジトリの作成
● “Project name”に任意のリポジトリ名を記入。
● “Vevisility Level”をPrivateに設定。
● “Create Project”をクリック。
GitLabの設定
65
リモートリポジトリの作成
● 作成したリモートリポジトリのURLが表示される。
● このURLを使ってローカルリポジトリをプッシュする。
GitLabの設定
66
リモートリポジトリの作成
● このURLを使ってローカルリポジトリをプッシュ、クローンなどを行う。
GitLabの設定
リモートリポジトリ
Aさんリポジトリ
ddc34...
Create cat.txt
ddc34...
Create cat.txt
67
リモートリポジトリの確認
● Repository→Commitsをクリックするとリモートリポジトリ上でコミットの履歴が確認できる。
GitLabの設定
④本実験でのGitLab運用方法
69
実験におけるGitLabの運用方法● グループでの成果物の管理
- グループリポジトリを使用
● 課題の提出、質問
- 課題の提出は成果物・レポートともにGitLab上から行う。
- 課題提出(中間報告・最終報告)や質問時には
どのバージョンなのか明らかにするためにコミットにタグをつける。
本実験でのGitLabの運用方法
70
グループの確認
● 画面左上のメニューから“Groups”を選択
● 所属グループ“le3hw2019g◯◯”が表示される
● グループ名をクリックした後、 “Members”タブを選択
● 実験グループのメンバーとTA用アカウント (le3hw2019)がメンバーとして登録されていることを確認
本実験でのGitLabの運用方法
71
グループの共有プロジェクトを作成する
● “Group”タブを選択、 “New Project”をクリック
本実験でのGitLabの運用方法
*グループの内どちらか1名が作成すれば良い。
72
グループの共有プロジェクトを作成する
● “Project name”を入力(課題で指示される)
● Visibility LevelがPrivateになっていることを確認
● “Create project”をクリック
本実験でのGitLabの運用方法
73
グループリポジトリにプッシュ、プル、クローン
本実験でのGitLabの運用方法
● 使用方法は個人のリポジトリと同様。
リモートリポジトリ
Aさんリポジトリ
ddc34...
Create cat.txt
ddc34...
Create cat.txt
Bさんリポジトリ
ddc34...
Create cat.txt
74
コミットにタグをつける
本実験でのGitLabの運用方法
最新のコミットに対して、タグをつける。-a の後にタグ、-m の後にコメントを記載
git tag -a <タグ> -m <コメント>
git push <エイリアス> --tag
git pushに--tagオプションをつけるとタグの情報をリモートリポジトリにプッシュする。
75
コミットにタグをつける
本実験でのGitLabの運用方法
git tag –a v1.0 –m ‘my version 1.0’git push origin --tag
2c2adf.. 550dfb..
3b503..
ab502c.. bd9c80..
V1.0
76
コミットにタグをつける
● Tagタブを開いて結果を確認。
- 課題提出、質問をするときは該当のコミットにつけたタグをメールに明記する。
本実験でのGitLabの運用方法
77
コンフリクト
● コンフリクトを未然に防ぐ- .gitignoreを設定して、ログファイルなど不要なファイルはGitの管理対象外にする。(https://github.com/github/gitignore)
- GitLabのマージリクエストを使用する。(https://docs.gitlab.com/ee/gitlab-basics/add-merge-request.html)
- 二人で1つのファイルを同時に編集しないようにする。
よくある問題と対策
78
コンフリクト
● コンフリクトした時の対処法- git statusコマンドでコンフリクトしているファイルを確認。
- 直接ファイルを開く。編集が重複している部分が“<<<<HEAD”、 “=======”、 “>>>>”でハイライトされているので、不要部分を削除する。
- 編集したファイルをステージング、コミットする。
よくある問題と対策
79
● サルでもわかるGit入門http://www.backlog.jp/git-guide/
● Pro Git book(日本語版)https://git-scm.com/book/ja/v2
● Git Cheat Sheethttps://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
参考情報