Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
数値計算屋のためのGit入門 / Starting Git
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kaityo256
PRO
March 28, 2022
Education
16k
30
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
数値計算屋のためのGit入門 / Starting Git
Gitの紹介と簡単な使い方
kaityo256
PRO
March 28, 2022
More Decks by kaityo256
See All by kaityo256
勾配ブースティングと決定木の話 / gradient boosting and decision trees
kaityo256
PRO
6
1.3k
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.7k
この講義について / 00-setup
kaityo256
PRO
2
390
GitHubによるWebアプリケーションのデプロイ / 07-github-deploy
kaityo256
PRO
2
310
演習:Gitの基本操作 / 04-git-basic
kaityo256
PRO
1
540
演習:Gitの応用操作 / 05-git-advanced
kaityo256
PRO
1
310
演習:GitHubの基本操作 / 06-github-basic
kaityo256
PRO
1
380
バージョン管理とは / 01-a-vcs
kaityo256
PRO
1
350
Gitの仕組みと用語 / 01-b-term
kaityo256
PRO
1
430
Other Decks in Education
See All in Education
Tangible, Embedded and Embodied Interaction - Lecture 7 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
2.3k
吉祥寺.pmは1つじゃない — 複数イベント並走運営の12年 —
magnolia
0
1.3k
SL AMIGOS 教育格差と私たちの取り組み - スリランカの支援学校への支援プロジェクト:リシンドゥ リオ 氏 (別府溝部学園短期大学 ビジネス観光コース 留学生):2720 Japan O.K. ロータリーEクラブ2026年4月6日卓話
2720japanoke
0
610
現場最前線から教えるデータサイエンス1 -ITベンダーにおけるデータサイエンティスト-
hidetoshikawaguchi
0
110
JAWS-UG初心者支部#81 GWにEduJAWSと何か作ろうもくもく会!
otsuki
0
130
Case Studies and Future Research - Lecture 12 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
170
2026年度春学期 統計学 第3回 クロス集計と感度・特異度,データの可視化 (2026. 4. 23)
akiraasano
PRO
0
140
Liberalism's Last Man and Asia
vyadav
0
150
コミュニティを通じた_キャリア設計のススメ_20260424.pdf
masakiokuda
0
310
0318
cbtlibrary
0
170
生成AI時代のエンジニア育成について考えてみた
akasan
0
140
LinkedIn
matleenalaakso
0
4.2k
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
220
How STYLIGHT went responsive
nonsquared
100
6.2k
The Curious Case for Waylosing
cassininazir
1
380
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
610
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Deep Space Network (abreviated)
tonyrice
0
170
Rails Girls Zürich Keynote
gr2m
96
14k
Embracing the Ebb and Flow
colly
88
5.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
1 1 47 数値計算屋のためのGit入門 慶應義塾大学理工学部物理情報工学科 渡辺
2 2 47 • バージョンを管理してくれる • 変更点を後から見やすくしてくれる • 多人数による開発を容易にしてくれる バージョン管理システムの一つ
(Version Control System: 略してVCS) プログラム開発現場ではVCSの導入は必須 いまどきVCSを使ってない開発現場は無い……と思う
3 3 47 「しまった!」を「なかったこと」にできる 「以前は動いてたのに」を再現できる バックアップがわりになる 修士論文提出直前にPCが壊れた USBに保存してたデータが読めなくなった ※ リモートリポジトリを別サーバに用意した場合
↑ こういう悲劇を防ぐ 編集の歴史を保存し、いつでも過去に戻ることができる
4 4 47 機能を追加し、別のインプットを与えたら計算が失敗した →機能を追加したことによるバグ?もともとバグっていたものが顕在化? 計算ルーチン (修正前) インプット A OK
計算ルーチン (修正版) インプットB NG 容疑者 機能追加前のソースを取って来て、Input Bを食わせる OK NG 今回の修正でバグが入った 計算ルーチン (修正前) インプット B もともとのバグが顕在化した バージョン管理をしていると、問題の切り分けが容易
5 5 47 いつの間にかバグが入っていて、いつ入ったバグかわからない →「歴史」を二分探索 開発時間軸 Ver. 1 Ver. 2
Ver. 3 Ver. 4 Ver. 5 (1)ここでバグ発覚 (3)ここでバグ混入と確定 (2)ここまでは動作することを確認 デバッグ時間軸 Ver. 2とVer. 3の差分をとれば、何が原因かがすぐにわかる 「容疑者」を絞るのは捜査の基本
6 6 47 年に二編論文を書きたい→ 半年で一つの研究を完結させたい プログラム開発+計算 執筆 調査 調査:先行研究の調査や、計算手法についての調査 (1ヶ月)
開発+計算:プログラム開発、計算の実行(4ヶ月) 執筆:結果の解析+論文執筆+投稿 (1ヶ月) 実態は・・・ 執筆 調査 デバッグ 開発 計算 半年 デバッグの時間を減らすことが最も効果的な「高速化」 バージョン管理システムはデバッグ時間を減らす強力なツール
7 7 47 正直な話、Gitは簡単ではない • コマンドが多い • 使い方に自由度が高い(人によって違う) • よくわからない状態になりがち
慣れるまで時間がかかると思って、根気よく使ってみよう 使い慣れると、無い生活は考えられません
8 8 47 git init git add git commit git
status git diff git log git clone git remote git fetch git push git switch git merge ローカルリポジトリの操作 ブランチの操作 状態や歴史の確認 リモートとのやりとり 「とりあえず」でも こんなにある
9 9 47 • 「リポジトリ」という単位で管理する • リポジトリごとに「データベース」がある • データベースには「歴史」が保存される •
「コミット」により、「歴史」が追加される リポジトリ データ ベース 管理されている ファイルやフォルダ ※ データベースの実体は .git というディレクトリに保存されている
10 10 47 管理したいファイルを含むディレクトリで git initを実行する リポジトリ データ ベース 管理されている
ファイルやフォルダ 管理したいファイルやフォルダ git init ※ 実際にはgit addしてからgit commitしないとgitの管理下に入らない
11 11 47 Gitでは「歴史」を丸と線で表現する • 丸:ある時点の「状態」 • 線:二つの状態の関係(差分) 三日前 二日前
昨日 昨日から修正を加えたファイル 歴史
12 12 47 コミット:現在の状態を保存して「歴史」に加える 三日前 二日前 昨日 昨日から修正を加えたファイル コミット 歴史
13 13 47 三日前 二日前 昨日 歴史 今日 この玉それぞれを「コミット」と呼ぶ この玉を新たに作る作業を「コミットする」と呼ぶ
commit (名詞) : Gitの歴史のある「点」(スナップショット) commit (動詞): Gitの歴史に新たにスナップショットを付け加えること https://git-scm.com/docs/gitglossary A Git Glossary
14 14 47 三日前 二日前 昨日 今日 git diff -
任意の二点の「差分」が取れる これは昨日書いた文章です。 -これは今日削除した文章です。 +これは今日追加した文章です。 $ git diff HEAD^ 白地:変更なし 赤字:削除 緑字:追加 自分がいつどこを修正したか確認できて便利
15 15 47 三日前 二日前 昨日 今日 git switch -
任意の時間に戻ることができる $ git switch –c twodaysago HEAD^^ 二日前の状態 「いつの間にか動かなくなった」 時に「この時点では動く」ことを 確認できる
16 16 47 git log – これまでの履歴を確認できる $ git log
commit 1ee64f77e9f32a947b0774eb2c82cd8da59aed40 (HEAD -> main) Author: H. Watanabe <
[email protected]
> Date: Fri Apr 10 19:42:01 2020 +0900 test2.txtを追加 commit 2a2ae2c7f601bf3d2a6d727745e57fa4a7de83b0 Author: H. Watanabe <
[email protected]
> Date: Fri Apr 10 19:41:26 2020 +0900 test.txtを追加 commit 1a2da617b848413daee9b2880c2f7e6d201ed2b9 Author: H. Watanabe <
[email protected]
> Date: Fri Apr 10 19:41:06 2020 +0900 initial commit 誰が、いつ、どんな修正をしたかを確認できる
17 17 47 gitには、三種類のエリアがある ワークツリー インデックス リポジトリ git init 直後の状態
https://www.slideshare.net/matsukaz/git-17499005 いつやるの?Git入門 file1 file2 まだGit管理下に 置かれていない
18 18 47 ワークツリー リポジトリ file1 file2 リポジトリへの追 加が予約された 「git
add ファイル名」により、インデックスに入る git add file1 file2 file1 file2 インデックス
19 19 47 ワークツリー リポジトリ file1 file2 リポジトリ管理下 に入った git
commitにより、変更がリポジトリに記録される git commit –m “file1とfile2を追加” file1 file2 インデックス
20 20 47 Q: なぜインデックスがあるか? A: 複数の修正がある時、一部の修正 を選んでコミットを作るため
21 21 47 ワークツリー リポジトリ file1 file2 file1 file2 最後にコミットした状態から、file1とfile2を修正した
インデックス
22 22 47 ワークツリー リポジトリ file1 file2 file1 file2 file1だけaddする
インデックス file1 git add file1
23 23 47 ワークツリー リポジトリ file1 file2 file1 file2 コミットする
インデックス git commit –m “file1を修正”
24 24 47 ワークツリー リポジトリ file1 file2 file1 file2 file2も同様にする
インデックス git add file2 git commit –m “file2を修正” file2
25 25 47 file1 file2 file1 file2 file1 file2 こんな歴史ができあがった
file1とfile2を追加 file1を修正 file2を修正 Gitでは積極的に歴史を作成、改変する
26 26 47 ワークツリー リポジトリ file1 file2 file1 file2 インデックス
file2 file1 git commit –a オプションで 「修正があったファイルを全てコミットに含める」 ことができる(git addを省略できる) 一人で使っている時は、慣れるまではこれで良いと思う
27 27 47 コミットが作成されると自動的に「ハッシュ」と 呼ばれる識別子がつく 831967136c9b05c721c87d2f8acff4bb4f3d907b c5961f9ec26906976814db253f2821f4b4786be3 78ec9625eff1d974b8b150842dca62d49a909f3b ハッシュ
28 28 47 831967136c9b05c721c87d2f8acff4bb4f3d907b c5961f9ec26906976814db253f2821f4b4786be3 78ec9625eff1d974b8b150842dca62d49a909f3b ハッシュ main main: 最初に作成されるブランチ
HEAD: いま自分がいるブランチ HEAD ブランチとはコミットにつけられた「別名」
29 29 47 main main main 「現在自分がいるブランチ」は、コミットすると自動的に動く 現在の状態 コミットを作成 コミットを作成
30 30 47 main 「git switch –c branchname」により 1. branchnameという名前のブランチを作り
2. そのブランチに自分(HEAD)が移る git switch –c branch main branch HEAD HEAD この時点ではmainとbranchは同じコミットを指している
31 31 47 main branch 「コミット」により動くのは、HEADがある(自分が今見ている)ブランチ main branch banch上でコミットした コミットが作られ、branchと
HEADが動く(mainはそのまま) HEAD HEAD
32 32 47 git switch branchname 自分が見るブランチ(HEADが指すブランチ)をbranchnameに変更する main branch HEAD
main branch HEAD git checkout main 今見ているブランチが mainに変わった
33 33 47 異なる二つのコミットから、新たなコミットを作ること git merge branchname 現在自分が見ているブランチに、branchnameの変更を取り込む この時、「歴史が分岐しているかどうか」で動作が変わる
34 34 47 main branch 現在、自分はbranchにいて、 mainよりも進んだ状態 branch git checkout
main mainブランチに移動した HEAD main HEAD
35 35 47 branch mainブランチに branchの修正を取り込む branch main HEAD main
HEAD git merge branch ブランチが移動するだけ (Fast Forward)
36 36 47 main branch HEAD 歴史が分岐している場合 自分がブランチで作業している間に mainブランチにコミットが増えていた ここで分岐した
自分はいまここにいる 分岐した後に増えたコミット
37 37 47 main branch HEAD HEAD git checkout main
まず、mainブランチに移る git merge branch 1. branchの修正を取り込み 2. 新たなコミットができて 3. main/HEADがそこを指す branch main HEAD
38 38 47 A. 「修正」をまとめるため mainブランチだけで作業していると… main HEAD main HEAD
機能Aと機能Bを実装するぞ 機能Bがバグったんだけど、 何が原因かわからない…
39 39 47 「まとまり」ごとにブランチを分けて作業 main branchA branchB 機能Bでバグったけど、 少なくとも機能Aは無関係 原則としてmainで作業しない
ブランチで作業し、テスト後にmainにmerge
40 40 47 リモートリポジトリとは、データベースだけのリポジトリ (ベアリポジトリ) ローカルリポジトリ データ ベース 管理されている ファイルやフォルダ
(ワーキングツリー) リモートリポジトリ データ ベース .git .git ワーキングツリーを含まず .gitディレクトリだけを含むと思えばよい
41 41 47 リモート リポジトリ データ ベース .git ローカルリポジトリ データ
ベース 管理されている ファイルやフォルダ (ワーキングツリー) .git git clone リモートからデータベースをローカルにコピーし、 ワーキングツリーを展開する
42 42 47 git push ローカルリポジトリ リモートリポジトリ ローカルで変更された「歴史」をリモートに反映させる ローカルリポジトリ リモートリポジトリ
43 43 47 git fetch ローカルリポジトリ リモートリポジトリ リモートで変更された「歴史」をローカルに取ってくる ローカルリポジトリ リモートリポジトリ
44 44 47 origin/main git fetchでローカルのmainやHEADは修正されない main HEAD git fetchで追加された部分
※ リモートのブランチは origin/branch名という名前にすることが多い
45 45 47 origin/main main HEAD origin/main main HEAD git
merge origin/main リモートのブランチをマージすることで修正を取り込む
46 46 47 git fetchしてgit merge origin/mainを一度に行う git pull ローカルリポジトリ
リモートリポジトリ ローカルリポジトリ main HEAD HEAD→mainも移動する 事故が起こりやすいので慣れるまでgit pullは使わない方がよい
47 47 47 Gitは慣れるまではそこそこ大変 しかし、使わない場合に比べて 開発効率は倍以上になる 使わない場合は人生を2倍以上損している ※ 個人差あり ※
個人差あり 普段から少しずつ使って慣れましょう