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入門
Search
mina
July 23, 2021
Technology
25
15k
Git入門
大学サークルのイントロ用資料です
Gitに入門します
resetやrevertも入れたらよかった気がしています
mina
July 23, 2021
Tweet
Share
More Decks by mina
See All by mina
おうちGitLabのススメ
silmin_
3
1.1k
暗号について
silmin_
0
130
LinuxCommand入門
silmin_
0
330
LinuxCommand入門2
silmin_
0
230
Webについて
silmin_
3
150
ネットワークとは
silmin_
0
190
コンピュータとは|初心者向け資料
silmin_
1
140
ビットについて|入門者向け資料
silmin_
0
170
GitLab-CIとGoogleCloudRunで作るSandBox環境
silmin_
2
230
Other Decks in Technology
See All in Technology
doda開発 生成AI元年宣言!自家製AIエージェントから始める生産性改革 / doda Development Declaration of the First Year of Generated AI! Productivity Reforms Starting with Home-grown AI Agents
techtekt
0
130
kubellが挑むBPaaSにおける、人とAIエージェントによるサービス開発の最前線と技術展望
kubell_hr
0
280
Create a Rails8 responsive app with Gemini and RubyLLM
palladius
0
110
kotlin-lsp を Emacs で使えるようにしてみた / use kotlin-lsp in Emacs
nabeo
0
150
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
150
Grafana MCP serverでなんかし隊 / Try Grafana MCP server
kohbis
0
340
Amplifyとゼロからはじめた AIコーディング 成果と展望
mkdev10
1
180
自分を理解するAI時代の準備 〜マイプロフィールMCPの実装〜
edo_m18
0
110
工具人的一生: 開發很多 AI 工具讓我 慵懶過一生
line_developers_tw
PRO
0
140
マルチテナント+マルチプロダクト SaaS への AI Agent の組み込み方
kworkdev
PRO
2
320
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
38k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
KATA
mclloyd
29
14k
Raft: Consensus for Rubyists
vanstee
139
7k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Writing Fast Ruby
sferik
628
61k
Producing Creativity
orderedlist
PRO
346
40k
Facilitating Awesome Meetings
lara
54
6.4k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Practical Orchestrator
shlominoach
188
11k
Transcript
Git入門 SecPrj Intro-phase
Gitとは Gitとは、オープンソースの分散バージョン管理システムの一つ。複数の 開発者が共同で一つのソフトウェアを開発する際などに、ソースコード やドキュメントなどの編集履歴を統一的に管理するのに用いられる。 Gitとは - IT用語辞典 e-Words https://e-words.jp/w/Git.html
ソフトウェアのバージョン管理 Gitがない世界 ファイル名 最終変更日 app.py 2021/03/01 app_ver2.py 2021/05/20 app_ver3.py 2021/05/10
app_latest.py 2021/06/02 app_latest2.py 2021/05/30 で,結局どれが 最新なんすか?
ソフトウェアのバージョン管理 Gitがない世界 Gitがある世界 ファイル名 最終変更日 app.py 2021/03/01 app_ver2.py 2021/05/20 app_ver3.py
2021/05/10 app_latest.py 2021/06/02 app_latest2.py 2021/05/30 で,結局どれが 最新なんすか? ファイル名 最終変更日 .git/ 2021/06/02 app.py 2021/06/02 変更履歴(コミットログ) 機能Bを実装 関数bを実装 機能Aを修正 関数aを実装 機能Aを実装 任意の変更点を 打ち消したり 戻したりできる
複数人での作業 Gitがない世界 ファイル名 変更点 app.py 機能A,B app_func1.py 機能A app_func2.py 機能B
app_func1.py 機能A実装 app_func2.py 機能B実装 app_func1.py app.py app_func2.py A B A B 機能A,B統合
複数人での作業 Gitがない世界 Gitがある世界 ファイル名 変更点 app.py 機能A,B app_func1.py 機能A app_func2.py
機能B app_func1.py 機能A実装 ファイル名 変更点 .git/ -- app.py 機能A,B app_func2.py 機能B実装 app_func1.py app.py app_func2.py A B ブランチによる管理 main func1 func2 commit ブランチ merge A B 機能A,B統合
Gitの基本的な操作 - ステージング(add) - コミット(commit) - ステータス(status) - ブランチ(branch) -
移動(switch) - マージ(merge) - プッシュ(push) - プル(pull) - クローン(clone)
Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B
Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B A B ステージング
Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B コミット A B
ステージング コミットするとGitに 変更が記録される (コミットオブジェクトの生成)
Gitのコミット(コミットオブジェクト) A2 A1 A3 コミットはスナップショット(その時点のディレクトリ/ファイルのコピー) コミットしたファイルと各種情報を持つオブジェクトがコミットオブジェクト
Gitのコミット(コミットオブジェクト) A2 A1 A3 コミット(コミットオブジェクト)にはそれぞれコミットハッシュとよばれる SHA1ハッシュ(40文字)が振られる コミットハッシュでコミット(コミットオブジェクト)を一意に指定できる 87e9293cefb2a50ba945 7f5c79553d74eeb360fc 5b9e980753180e96ab40
41cb43c507d86bfff3f6 66e5c0862066a1c0809a 5ff693a8123ea3f6e6e5
Gitにおけるファイルのステータス ファイルには4つの状態がある Untracked(追跡されてない)/Unmodified(変更なし)/ Modified(変更あり/ステージングされていない)/Staged(ステージングされている) Git - 変更内容のリポジトリへの記録 https://git-scm.com/book/ja/v2/Git-の基本-変更内容のリポジトリへの記録
Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex)
関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的
ブランチを 移動して作業 Gitでブランチを使う ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的 a b コミット
ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない
ブランチを 割振って作業 Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない
ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的
実装する機能 によって分離 Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない
ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的 A B
ブランチをマージする a b コミット マージ あるブランチの変更と別のブランチを統合/反映する 反映は基本自動で行われるが,変更の重複点のみコンフリクトを起こす コンフリクトは手動で解消する必要がある.
ブランチをマージする あるブランチの変更と別のブランチを統合/反映する 反映は基本自動で行われるが,変更の重複点のみコンフリクトを起こす コンフリクトは手動で解消する必要がある. a b コミット マージ 変更が重複すると コンフリクト
リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ リモートリポジトリ 開発者A
開発者B 複製/反映 複製/反映 変更 変更
リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ 複製がどこかにあればリモートリポジトリが死んでもある程度は復元可能 リモートリポジトリ
開発者A 開発者B 複製/反映 複製/反映 変更 変更
リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ GitHubやGitLabなどはリモートリポジトリの実装の1つ リモートリポジトリ
開発者A 開発者B 複製/反映 複製/反映 変更 変更
リモートリポジトリへの操作 リポジトリを複製(Clone) リモートリポジトリ clone ローカルの変更反映/リモートの変更反映 リモートリポジトリ pull push cloneはデフォルトで デフォルトブランチを複
製する push/pullは任意の ブランチに対して実行 (b1だけpush...など)
ハンズオン1 ローカルリポジトリを作成する
リポジトリを初期化する ディレクトリにあるファイルはそのままで, カレントディレクトリをGit管理下に置く .git/ が生成され,既にあるファイルは 追跡されていない未コミットファイルとなる $ git init $
git status
Gitでコミットする 未コミットの変更点A があるファイル ステージ A $ git diff コミットツリー Untrackedなファイルは差分表示されない
Gitでコミットする 未コミットの変更点A があるファイル ステージ A A ステージング $ git add
<filename> コミットツリー
Gitでコミットする ユーザ情報の設定 コミットユーザの情報として利用される $ git config --global user.email “your email”
$ git config --global user.name “your name” $ git config --global core.editor “nano”
Gitでコミットする 未コミットの変更点A があるファイル ステージ A コミット A $ git commit
$ git commit -m “...” or コミットツリー ステージング
Gitでコミットする コミットツリー 未コミットの変更点A があるファイル ステージ A A コミット $ git
log ステージング
Trackedなファイルであれば差分が表示される
Gitでブランチを使う master ブランチを確認する $ git branch
Gitでブランチを使う master b1 ブランチを作成する 作成したカレントブランチの情報を引き継ぐ $ git branch b1
Gitでブランチを使う master b1 カレントブランチを移動する master → b1 $ git switch
b1 $ git switch -c b1 で作成&移動も可能
Gitでブランチを使う master b1 b1で何かを変更し、コミットする このコミットはmasterに続く形になる (b1はmasterから切られているので) $ git add <filename>
$ git commit -任意の編集-
Gitでブランチを使う master b1 b1で何かを変更し、コミットする このコミットはmasterに続く形になる (b1はmasterから切られているので) $ git log
Gitでブランチを使う master b1 カレントブランチをmasterに移動 1つめのコミットしかみえない $ git switch master
Gitでブランチを使う master b1 b1ブランチをmasterブランチにマージ 変更がb1でコミットした変更が反映されている $ git merge b1
ハンズオン2 リモートリポジトリの作成/Clone/Push/Pull
リモートリポジトリのクローン,プッシュ,プル まず自分のGitHubページで新しいリポジトリを作る
リモートリポジトリのクローン,プッシュ,プル
最初のコミットがされた状態でリモートリポジトリが生成される リモートリポジトリのクローン,プッシュ,プル
$ git clone https://github.com/silmin/git-test.git リモートリポジトリのクローン,プッシュ,プル
リモートリポジトリのクローン,プッシュ,プル cloneしてきたリポジトリに変更点を加えて,コミットする
リモートリポジトリのクローン,プッシュ,プル
helloが追加されている $ git push origin main リモートリポジトリのクローン,プッシュ,プル
$ git push origin main リモートリポジトリ ブランチ
リモートリポジトリのクローン,プッシュ,プル WebUIから直接変更してみる
リモートリポジトリのクローン,プッシュ,プル リモートでの変更をローカルにプルして反映
ハンズオンおわり
gitconfigについて それぞれのリポジトリにはその設定ファイルとして .git/config がある 全てのリポジトリに適用されるグローバルな設定 ~/.gitconfig もある さっきGitHubで作った リポジトリの.git/config originはリモートリポジトリに
つけられた名前
Gitのブランチ main ブランチポインタ カレントブランチ(HEAD) ブランチの実態はただのコミットへの参照(ポインタ) ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチの実態はただのコミットへの参照(ポインタ) ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している ブランチポインタ カレントブランチ(HEAD)
$ git switch -c temp
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git commit ... ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git switch main ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git commit ... ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git merge temp ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ a 2 a 1 a 3 temp main b
1 a 4 a 5 ブランチポインタ カレントブランチ(HEAD) a 1 a 2 a 3 b 1 a 4 a 5 main temp