Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
git-inside
Search
Hiroyuki Morita
May 16, 2017
Programming
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
git-inside
.git の中身を見るという内々勉強会用の資料です
(画像などは入っていないので後日差し替え予定)
Hiroyuki Morita
May 16, 2017
More Decks by Hiroyuki Morita
See All by Hiroyuki Morita
Rubyistなら知っておきたい継承の話 / The inheritance for Rubyist
chiastolite
4
1.5k
esaを使って暗黙知を減らす取り組み
chiastolite
2
4.5k
vagrant-itamae
chiastolite
1
1.6k
sushi for common people
chiastolite
0
390
Social Coding with GitHub
chiastolite
0
210
Low Level Git
chiastolite
0
160
about Immutable Infrastructure
chiastolite
0
120
Other Decks in Programming
See All in Programming
What We Talk About When We Talk About XP
m_seki
2
680
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
280
wkhtmltopdfの次どうするか問題2026
willnet
2
1.6k
すこし踏み込む CancellationToken
htkym
2
940
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
3
12k
Security issues being discussed on Web Platforms
petamoriken
0
1.2k
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
2
300
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
310
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
170
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
120
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
170
アクセシビリティから考える情報設計
high_g_engineer
0
390
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
550
The browser strikes back
jonoalderson
0
1.7k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
A Modern Web Designer's Workflow
chriscoyier
699
190k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Transcript
࣮ߦ͠ͳ͕ΒΈΔ .gitͷத
త • gitͷΦϒδΣΫτཧͷΈΛཧղ͢Δ • ίϛοτ͔ΒͭΒͳΔάϥϑߏ • branch/tagͳͲͷϦϑΝϨϯεߏ • ߏΛΘ্͔ͬͨͰίϚϯυΛݟΔ͜ͱͰཧղ͕ਂ·Δ •
Կ͕͓͖͍ͯΔ͔Θ͔Δ͔Βɺݩʹ͢ํ๏Θ͔Δ
git init ΛΈΔ
git initޙͷ.git $ git init $ ls -p .git/ HEAD
config description hooks/ info/ objects/ refs/ $ find .git/objects .git/objects .git/objects/info .git/objects/pack
git add & commitΛΈΔ $ echo 'Hello world!' > hello_world.txt
$ git add hello_world.txt $ git commit -m 'First Commit' [master (root-commit) 27baa2b] First Commit 1 file changed, 1 insertion(+) create mode 100644 hello_world.txt
.git/objectsͷத $ find .git/objects .git/objects .git/objects/27 .git/objects/27/baa2b9da21b4485966c2a97268876b189331e9 .git/objects/9b .git/objects/9b/e385e79f8f3e0870e48474809dab293843aece .git/objects/cd
.git/objects/cd/0875583aabe89ee197ea133980a9085d08e497 .git/objects/info .git/objects/pack 3ͭϑΝΠϧ͕૿Ճ
3ͭϑΝΠϧ͕૿͑ͨ • 1͓ͭͦΒ͘ςΩετϑΝΠϧ • Γͷ2ϑΝΠϧʹԿ͕?
Ͱݟ͍͖ͯ·͢
# ίϛοτޙͷϝοηʔδ [master (root-commit) 27baa2b] First Commit ~~~~~~~ 1 file
changed, 1 insertion(+) create mode 100644 hello_world.txt # .gitҎԼͷϑΝΠϧ .git/objects/27/baa2b9da21b4485966c2a97268876b189331e9 ~~~~~~~~ SHA-1͕Ұக͍ͯ͠Δ
27baa2b(ུ)ͷதΛݟͯΈΔ $ git cat-file -t 27baa2b9da21b4485966c2a97268876b189331e9 commit ͜ͷϑΝΠϧͷλΠϓcommit
27baa2b(ུ)ͷதΛݟͯΈΔ தʹ͜Μͳใ͕อଘ͞Ε͍ͯΔ $ git cat-file -p 27baa2b9da21b4485966c2a97268876b189331e9 tree 9be385e79f8f3e0870e48474809dab293843aece author
chiastolite <
[email protected]
> 1494611014 +0900 committer chiastolite <
[email protected]
> 1494611014 +0900 First Commit
27baa2b(ུ)ͷதΛݟͯΈΔ • author ͱ λΠϜελϯϓ • commiter ͱ λΠϜελϯϓ •
ίϛοτϝοηʔδ • tree?
# commitΦϒδΣΫτͷத tree 9be385e79f8f3e0870e48474809dab293843aece # .gitҎԼͷϑΝΠϧ .git/objects/9b/e385e79f8f3e0870e48474809dab293843aece ·ͨSHA-1͕Ұக͍ͯ͠Δ
9be385e(ུ)ͷதΛݟͯΈΔ $ git cat-file -t 9be385e79f8f3e0870e48474809dab293843aece tree ͜ͷϑΝΠϧͷλΠϓtree
9be385e(ུ)ͷதΛݟͯΈΔ $ git cat-file -p 9be385e79f8f3e0870e48474809dab293843aece 100644 blob cd0875583aabe89ee197ea133980a9085d08e497 hello_world.txt
9be385e(ུ)ͷதΛݟͯΈΔ • mode • ύʔϛογϣϯͱ͔ͦ͏͍͏ͷ • ϑΝΠϧ໊ • SHA-1 •
blob?
# treeΦϒδΣΫτͷத 100644 blob cd0875583aabe89ee197ea133980a9085d08e497 hello_world.txt # .gitҎԼͷϑΝΠϧ .git/objects/cd/0875583aabe89ee197ea133980a9085d08e497 ·ͨSHA-1͕Ұக͍ͯ͠Δ
cd08755(ུ)ͷதΛݟͯΈΔ $ git cat-file -t cd0875583aabe89ee197ea133980a9085d08e497 blob ͜ͷϑΝΠϧͷλΠϓblob
cd08755(ུ)ͷதΛݟͯΈΔ $ git cat-file -p cd0875583aabe89ee197ea133980a9085d08e497 Hello world! Α͏͘தʹḷΓ͍ͭͨ
͜͜·Ͱͷ·ͱΊ git • 3छྨͷλΠϓͷΦϒδΣΫτͰཧͯ͠Δ • commmit • tree •
blob • ֤ΦϒδΣΫτSHA-1Ͱཧ͞Ε͍ͯͯΦϒδΣΫτಉ࢜Λ ࢀর͍ͯ͠Δ
ਤʹ͢Δͱ͜Μͳײ͡
࣍ʹ # ϑΝΠϧΛαϒσΟϨΫτϦʹίϐʔ $ mkdir subdir $ cp hello_world.txt subdir/sample.txt
$ git add subdir/sample.txt # ݩϑΝΠϧΛॻ͖͑ $ echo 'Hello world!!' > hello_world.txt $ git add -u hello_world.txt $ git commit -m'update'
ࠓͷঢ়ଶ !"" hello_world.txt #=> Hello world!! #"" subdir #"" sample.txt
#=> Hello world!
commitͷத $ git cat-file -p HEAD tree 95aaf923a1c8171c9ec05225a3911a0dbeb53d6f parent 27baa2b9da21b4485966c2a97268876b189331e9
author chiastolite <
[email protected]
> 1494611946 +0900 committer chiastolite <
[email protected]
> 1494611946 +0900 update • parent͕Ճ͞Ε͍ͯΔ • 1ͭલͷcommitͷSHA-1
treeͷத git cat-file -p 95aaf923a1c8171c9ec05225a3911a0dbeb53d6f 100644 blob b297683f36d0557a8ef83506beda7b80e233723d hello_world.txt 040000
tree 601df7ed8aabbd875614ba3a301fe344e5c45ae2 subdir • த͕มΘͬͨhello_world.txtͷSHA-1͕มԽ • treeͷதʹtree͕
αϒπϦʔͷத git cat-file -p 601df7ed8aabbd875614ba3a301fe344e5c45ae2 100644 blob cd0875583aabe89ee197ea133980a9085d08e497 sample.txt •
sample.txt࠷ॳͷίϛοτͷhello_world.txtͱಉ͡SHA-1
͜͜·Ͱ • commitΛ͢Δͱݩcommitͷࢀর͕͓͖Δ • 1όΠτϑΝΠϧ͕มΘΕSHA1͕มΘΔ • SHA1͕Ͱ͖Δͱ͍͏͜ͱΦϒδΣΫτ͕1ͭੜ͞Ε͍ͯ Δ • gitͰࠩͰཧ͕͞Ε͍ͯͳ͍
• ϑΝΠϧ໊͕มΘͬͯத͕ҰॹͳΒSHA1มΘΒͳ͍
ਤʹ͢Δͱ͜Μͳײ͡
SHA-1ͷ͖·Γ͔ͨ • த(+ΦϒδΣΫτͷtype)͔Β Ұҙʹ ܾ·͍ͬͯΔ • ͩΕ͕ͲͷλΠϛϯάͰHello world!ͯ͠SHA-1 cd0875583aabe89ee197ea133980a9085d08e497 $
git hash-object -t blob <(echo 'Hello world!') cd0875583aabe89ee197ea133980a9085d08e497 ৄ͘͠ Gitsha1ͷܭࢉΛͲͷΑ͏ʹ͍ͬͯΔͷ͔ · DQNEO ىۀه ͕ৄ͍͠
refs
refs • master • branch • tag • HEAD(=@) •
ORIG_HEAD ͳͲͳͲ
.git/HEAD ݱࡏࢀর͍ͯ͠Δͱ͜Ζ $ cat .git/HEAD ref: refs/heads/master ࠓmasterϒϥϯνΛݟ͍ͯΔΆ͍
$ cat .git/refs/heads/master 2e7a843cd5706b128e13f06cf7572cda27afa0a7 $ git log commit 2e7a843cd5706b128e13f06cf7572cda27afa0a7 (HEAD
-> master) • Ұக • masterϒϥϯν͕ͲͷίϛοτΛࢦ͍ͯ͠Δ͔ܾΊ͍ͯΔ
ͨΊ͠ʹ $ mv .git/refs/heads/{master, hogehoge} $ cat 'ref: refs/heads/hogehoge' >
.git/HEAD ͱΔͱ git branch -m hogehoge͕Ͱ͖Δ
branch $ git branch test_branch $ cat .git/refs/heads/test_branch 2e7a843cd5706b128e13f06cf7572cda27afa0a7 •
ϒϥϯνΛ͚ͬͨͩͩͱSHA-1͔ΘΒͳ͍ • ͜ͷ࣌ͰmasterͱԿҧ͍͕ͳ͍ • ϒϥϯνͲͪΒ͔ͱ͍͏ͱϙΠϯλʔϥϕϧతײ֮ • ݴ͏΄ͲࢬΆ͘ͳ͍
branchΛࢀর͍ͯ͠Δঢ়ଶͰίϛοτΛͯ͠ΈΔ $ git checkout test_branch Switched to branch 'test_branch' $
git rm -r subdir rm 'subdir/sample.txt' $ git commit -m'Remove sub dir'
$ cat .git/refs/heads/test_branch 508b59bff7ae9af5b516d873eea32c9446540c09 $ git cat-file -p 686bcfe77bf1c43eb8d4e2aa75075e6d6e7e961e tree
19e6ae1b6538047780cd1d44a10fdb0685f15705 parent 2e7a843cd5706b128e13f06cf7572cda27afa0a7 author chiastolite <
[email protected]
> 1494613438 +0900 committer chiastolite <
[email protected]
> 1494613438 +0900 Remove sub dir ίϛοτ͢Δref͕มߋ͞ΕΔ
mergeͯ͠ΈΔ $ git checkout test_branch $ git merge test_branch --no-ff
Removing subdir/sample.txt Merge made by the 'recursive' strategy. subdir/sample.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 subdir/sample.txt
$ git cat-file -p master tree 19e6ae1b6538047780cd1d44a10fdb0685f15705 parent 2e7a843cd5706b128e13f06cf7572cda27afa0a7 parent
508b59bff7ae9af5b516d873eea32c9446540c09 author chiastolite <
[email protected]
> 1494613595 +0900 committer chiastolite <
[email protected]
> 1494613595 +0900 Merge branch 'test_branch' • parent͕2ͭ • masterͩͬͨͱ͜Ζ • test_branch
ਤ
rebaseͯ͠ΈΔ (͜ͷ··ͩͱ্ख͍͔͘ͳ͍ͷͰmasterΛmergeલʹͯ͠ί ϛοτΛՃ͓ͯ͘͠)
$ git rebase master First, rewinding head to replay your
work on top of it... Applying: Remove sub dir $ cat .git/refs/heads/test_branch 0957492b728dbf7854f46c30be6670fcf29b61a6 ৽͍͠SHA-1
rebaseલͷίϛοτ? $ git log 508b59bff7ae9af5b516d873eea32c9446540c09 commit 508b59bff7ae9af5b516d873eea32c9446540c09 Author: chiastolite <
[email protected]
>
Date: Sat May 13 03:23:58 2017 +0900 Remove sub dir ී௨ʹΞΫηεͰ͖Δ rebaseͯ͠ίϛοτ͕ফ͑ͨΓ͠ͳ͍
ਤ
͓͖͍֮͑ͯͨ͜ͱ • gitͰίϛοτ͕ফ͑Δ͜ͱͳ͍ • (ྫ֎తʹ)git gcίϚϯυͷΈ • ͳͷͰؾܰʹrebasemerge͔ͯͬͨ͠Βͦ͏
ϦϞʔτͷѻ͍ • gitͰϦϞʔτϦϙδτϦͷૢ࡞Λग़དྷΔͷҎԼͷίϚϯυͷ Έ (set-remote ઃఆ͢Δ͚ͩͳͷͰૢ࡞Ͱ͖ͳ͍) • fetch • push
• pull෦Ͱfetch + (merge or rebase) ΛݺΜͰ͍Δ
• fetch • ϦϞʔτϦϙδτϦͷঢ়ଶΛϩʔΧϧʹ࣋ͬͯ͘Δ • push • ϩʔΧϧͷ༰Λࢦఆͨ͠ϒϥϯνʹૹΔ
git remote ײ֮తʹϨΠϠʔߏͱࣅͯΔؾ͕ͯ͠Δ • ϩʔΧϧͱϦϞʔτͱ͍͏ϨΠϠʔ • fetch͢Δ͜ͱͰϩʔΧϧͷϦϙδτϦϨΠϠʔʹϦϞʔτͷ ༰Λө͢ΔΈ͍ͨͳ • ౷߹͡Όͳ͍ͷ͕ҧ͏ͱ͜Ζ
ਤʹ͢Δͱ͜Μͳײ͡?
origin/masterͱorigin masterͷҧ͍ • origin master • originʹઃఆͨ͠ϦϞʔτϦϙδτϦͷmasterϒϥϯν • ϦϞʔτͷ •
origin/master • originʹઃఆͨ͠ϦϞʔτϦϙδτϦͷmasterϒϥϯνͷref Λखݩʹίϐʔͨ͠ͷ • ϩʔΧϧͷ
• origin/master࠷ޙʹfetchͨ͠ͱ͖ͷ origin ͷ masterͷঢ়ଶ ͳͷͰϦϞʔτͷ࠷৽ͱݶΒͳ͍ • ϦϞʔτʹै͠Α͏ͱ rebase origin/master͢Δ߹
ࣄ લʹfetchͨ͠΄͏͕Α͍
Α͘͏Φϓγϣϯ • add • -u • -p • commit •
--ammend • -C • -v
Α͘͏Φϓγϣϯ • stash • --keep-index • push • --force-with-lease •
rebase • -i • --autosquash(git commit --fixupલఏ)
Conditional configuration(>= Git 2.13) $ cat ~/.gitconfig [includeIf "gitdir:~/work/"] path
= .gitconfig-work [includeIf "gitdir:~/play/"] path = .gitconfig-play $ cat ~/.gitconfig-work [user] name = Hiroyuki Morita email =
[email protected]
$ cat ~/.gitconfig-play [user] name = chiastolite email =
[email protected]
ࣄͱϓϥΠϕʔτɺࣄͱOSSͷઃఆΛ͚ΒΕΔ