Share
Embed
cookpad-17day-tech-internship-2017-git
クックパッド17day技術インターンシップの前半、Gitへんの講義資料です
MOROHASHI Kyosuke
August 31, 2017
Transcript
61 slides
-
‣ Git is a free and open source distributed version
control system designed to handle everything from small to very large projects with speed and efficiency. ‣ https://git-scm.com/ (JU -
Git is a free and open source distributed version
control system -
‣ Git is a content-addressable filesystem. Great. ‣ see https://git-scm.com/book/en/v2/
| Section 10.2 ‣ …Ͳ͏͍͏͜ͱͳͷ? “version control” on Git -
‣ ͋Δ࣌ͷϦϏδϣϯ + ϝλσʔλ͕ commit ‣ ͍ͭɺ୭͕ɺͲΜͳϝοηʔδͰίϛοτ͔ͨ͠ ‣ ϦϏδϣϯͷϧʔτtreeͲΕ͔ ‣
commitͲΕ͔ ‣ commitͷੵΈॏͶ = ιϑτΣΞͷཤྺ commit -
$ git clone [email protected]/fizz-buzz-git.git $ git log --oneline c827de7 Add
note 99c0455 Init FizzBuzz $ git cat-file -p 99c0455 tree 4ddd72269bffbe854007323f6b753e47dd3498ae author moro <[email protected]> 1466746090 +0900 committer moro <[email protected]> 1466746090 +0900 Init FizzBuzz $ git cat-file -p 4ddd72269bffbe854007323f6b753e47dd3498ae 100644 blob fb738ec4422280fa0938c1cf2363f244168ffa5d fizz_buzz.rb $ git cat-file -p fb738ec4422280fa0938c1cf2363f244168ffa5d 1.upto(100).each do |n| if (n % 15).zero? puts 'FizuBazu' ... commit = tree + ϝλσʔλ -
99c0455 4ddd7226 fb738ec44 2016-06-24 14:28:10 Init FizzBuzz fizz_buzz.rb 1.upto(100).each
do if (n % 15).zero? puts 'FizuBazu' commit tree blob -
$ git log --oneline c827de7 Add note 99c0455 Init FizzBuzz
$ git cat-file -p c827de7 tree 0b6d5f879bab3bdb4856c67a908d430f0bb3f18d parent 99c045537a1deb673a70c72bebbd9a91490068b0 author moro <[email protected]> 1466746241 +0900 committer moro <[email protected]> 1466746241 +0900 Add note $ git cat-file -p 0b6d5f879bab3bdb4856c67a908d430f0bb3f18d 100644 blob 63d8ebbbad7040256bd8f4d12a51df27e75888ce README.md 100644 blob fb738ec4422280fa0938c1cf2363f244168ffa5d fizz_buzz.rb commit = tree + ϝλσʔλ -
99c0455 c827de7 4ddd7226 0b6d5f87 fb738ec44 fb738ec44 63d8ebbba 2016-06-24 14:30:41
Add note 2016-06-24 14:28:10 Init FizzBuzz README.md fizz_buzz.rb fizz_buzz.rb 1.upto(100).each do if (n % 15).zero? puts 'FizuBazu' 1.upto(100).each do if (n % 15).zero? puts 'FizuBazu' FizzBuzz example to commit tree blob parent -
99c0455 c827de7 4ddd7226 0b6d5f87 fb738ec44 63d8ebbba 2016-06-24 14:30:41 Add
note 2016-06-24 14:28:10 Init FizzBuzz README.md fizz_buzz.rb fizz_buzz.rb 1.upto(100).each do if (n % 15).zero? puts 'FizuBazu' FizzBuzz example to commit tree blob parent -
‣ Git is a content-addressable filesystem. Great. ‣ see https://git-scm.com/book/en/v2/
| Section 10.2 ‣ ͳΔ΄Ͳ Git Internals -
99c0455 c827de7 4ddd7226 0b6d5f87 fb738ec44 63d8ebbba 2016-06-24 14:30:41 Add
note 2016-06-24 14:28:10 Init FizzBuzz README.md fizz_buzz.rb fizz_buzz.rb 1.upto(100).each do if (n % 15).zero? puts 'FizuBazu' FizzBuzz example to commit tree blob parent -
ϒϥϯνBͰͷ࡞ۀதɺA4Λbaseʹͨ͘͠ͳͬͨ A2 A1 A3 A4 B2 B1 B3 X
A/HEAD B/HEAD $ git checkout B $ git rebase A working copy -
A2 A1 A3 A4 B2 B1 B3 X A/HEAD
B2' B1' B3' B/HEAD working copy ແ໊ϒϥϯν A4ͷ্ʹB1, B2, B3ͱಉͷมߋΛద༻͠ɺ ͦΕ͕ϒϥϯνBʹͳΔ $ git rebase A -
A2 A1 A3 A4 X A/HEAD B2' B1' B3'
B/HEAD A3,4 B1'' B3'' ແ໊ϒϥϯν ͜ͷ߹ɺ౷߹আͨ͠ίϛοτΛ ىXͷ্ʹੵΈॏͶͨ৽ͨͳίϛοτ͕Ͱ͖ɺ ϒϥϯνBͷHEAD͕ߋ৽͞ΕΔɻ B2 B1 B3 ͖ͬ͞ͷ ແ໊ϒϥϯν $ git rebase -i X -
‣ rebase ͢Ε͍͍ͱ͍͏ͷͰͳ͍ ‣ commit ͕ผʹͳΔɺࠩద༻ͰϋϚΔɺͳͲ ‣ Ұʹ1ͭͣͭ (rebase -i͍ͯ͠Δ࠷தʹ৽ػೳΛೖΕͳ͍)
‣ ͖͞΄Ͳͷʮແ໊ϒϥϯνʯɺcommit ͕Θ͔ΕϦϏδϣ ϯΛ෮ݩͰ͖ΔͷͰ҆৺ɻ ‣ $ git reflog ͰݟΒΕΔ࡞ۀίϐʔͷཤྺ͔Β୳ͤΔɻ rebase: protip -
‣ ։ൃ͍ͯͬͨ͠ιϑτΣΞͷϦϏδϣϯͷཤྺΛɺ ωοτϫʔΫӽ͠ʹଞͷ։ൃऀͱڞ༗Ͱ͖Δ ‣ push: खݩͷ commit(commitΛؚΉ)ΛϦϞʔτͷ ϦϙδτϦʹૹΔ ‣ ओϦϞʔτϦϙδτϦ
origin ͱ͍͏໊લ͕Ұൠత push : ࣗͷ commit Λૹ৴ -
$ git push origin master push ͷྫ ‣ ϩʔΧϧͷϦϙδτϦͷNBTUFSϒϥϯνʹੵΈॏͶͨDPNNJUͷཤྺΛ ‣
PSJHJOͱ͍͏໊લͷϦϞʔτϦϙδτϦͷ ‣ NBTUFSϒϥϯνʹૹΔ -
$ git push moro 12345678:topic-a push ͷྫ(2) ‣ ϩʔΧϧͷϦϙδτϦDPNNJU͔ΒḷΕΔཤྺΛ ‣
NPSPͱ͍͏໊લͷϦϞʔτϦϙδτϦͷ ‣ UPQJDBϒϥϯνʹૹΔ -
$ git remote show origin * remote origin Fetch URL:
[email protected]:moro/clock.git Push URL: [email protected]:moro/clock.git HEAD branch: master Remote branch: master tracked Local ref configured for 'git push': master pushes to master (up to date) "remote" ͷϦϙδτϦ...? ‣ ʮͷ໊લͷϦϞʔτϦϙδτϦʯ -
$ git fetch origin fetch: clone ͨ͠ޙʹՃ͞Εͨcommitͷऔಘ ‣ ϦϞʔτϦϙδτϦͷDPNNJUΛɺϩʔΧϧʹ࣋ͬ ͯ͘Δ
‣ ࣋ͬͯ͘Δ͚ͩɺखݩͷίʔυ ࡞ۀίϐʔ มΘ Βͳ͍ -
L2 L1 L3 L4 R2 R1 R3 X working
copy ผͷਓ͕࡞ͬͨ ίϛοτ -
L2 L1 L3 L4 R2 R1 R3 X working
copy ผͷਓ͕࡞ͬͨ ίϛοτ fetch: working copyมΘΒͳ͍ -
$ git pull origin pull: fetch+merge ‣ ϦϞʔτϦϙδτϦ͔ΒGFUDI͠ɺNFSHF͢Δ ‣ ࡞ۀίϐʔ͕มߋ͞ΕΔ
‣ ׳ΕΔ·Ͱ͓͢͢Ί͠ͳ͍ ‣ pull --rebase ͢ΔͱGFUDI SFCBTF ‣ ׳ΕΔ·ͰϚδͰ͓͢͢Ί͠ͳ͍ -
L2 L1 L3 L4 R2 R1 R3 X working
copy ผͷਓ͕࡞ͬͨ ίϛοτ pull: working ͱ remote ͕Ϛʔδ͞ΕΔ L5 -
L2' L1' L3' L4' R2 R1 R3 X working
copy ผͷਓ͕࡞ͬͨ ίϛοτ pull —rebase : rebase͞ΕΔ = Ln͕ผίϛοτʹͳΔ -
cookpad/app working copy $ git fetch origin $ git
checkout origin/master -b topic $ git add ... $ git commit -m '' $ git push -u origin topic commit commit clone fetch push FH(JU)VCqPXͱݺΕ͍ͯΔͷ -
cookpad/app - cookpad/app:topic working copy $ git fetch origin
$ git checkout origin/master -b topic $ git add ... $ git commit -m '' $ git push -u origin topic commit commit clone fetch push -
cookpad/app - cookpad/app:topic working copy $ git fetch origin
$ git checkout origin/master -b topic $ git add ... $ git commit -m '' $ git push -u origin topic commit commit clone fetch push pull request -
cookpad/app - cookpad/app:topic working copy $ git fetch origin
$ git checkout origin/master -b topic $ git add ... $ git commit -m '' $ git push -u origin topic commit commit clone fetch push pull request ‣ มߋ͍ͯ͠Δ࠷தʹɺଞऀͷมߋͱিಥ͠ͳ͍ڥ ‣ มߋ༰ΛɺνʔϜͰϨϏϡʔ͢ΔΈ ‣ ։ൃϨϏϡʔྃͨ͠มߋΛɺத৺ͷ ϦϙδτϦʹద༻͢ΔΈ ‣ த৺ϦϙδτϦʹೖͬͨ ଞऀͷมߋΛऔಘ͢ΔΈ -
cookpad/app working copy $ git fetch origin $ git
remote add moro git@.... $ git checkout origin/master -b topic $ git add ... $ git commit -m '' $ git push moro topic commit commit clone fetch push pull request moro/app - moro/app:topic -
‣ 1SP(JUCPPL ‣ ެࣜαΠτʹͯɺॻ੶ͷશ൛ ༁͖ ͕͋ΔɻҰಡ͢ΔͱΑ͍ɻ ‣ https://git-scm.com/book/ja/v2 ‣ ʲ༁ʳ(JUΛϘτϜΞοϓ͔Βཧղ͢Δ
‣ ࠓͬͨΑ͏ʹDPNNJUΦϒδΣΫτΛ௨ͯ͡(JUΛཧղ͢Δهࣄɻ ݸਓతʹͱͯʹཱͬͨ ‣ http://keijinsonyaban.blogspot.jp/2011/05/git.html ‣ લ৬ͷษڧձͰಉ͡Α͏ͳࢿྉΛ࡞ͬͯ·ͨ͠ɻΓDPNNJUͷղઆ͕ଟ͍ ‣ https://speakerdeck.com/moro/my-mental-model-about-git ͋ΘͤͯಡΈ͍ͨ