$30 off During Our Annual Pro Sale. View details »

「Gitによるバージョン管理」の執筆者によるGit勉強会か講演会

 「Gitによるバージョン管理」の執筆者によるGit勉強会か講演会

「Gitによるバージョン管理」の執筆者によるGit勉強会か講演会 のメインスライドです。typo などの修正とQAを追記しています。

Nobuhiro Iwamatsu

February 29, 2012
Tweet

More Decks by Nobuhiro Iwamatsu

Other Decks in Programming

Transcript

  1. . . . . . . . . . .

    . . . ʮGitʹΑΔόʔδϣϯ؅ཧʯͷ ࣥචऀʹΑΔGitษڧձ͔ߨԋձ ؠদ ৴༸ খ઒ ৳Ұ࿠ લాߞฏ ্઒७Ұ 2012 ೥ 2 ݄ 28 ೔
  2. . . . . . .

  3. . . . . . . ͓໿ଋ Git ͸

  4. . . . . . . ͓໿ଋ Git ͸ ͬ͡ͱ͡Όͳ͍Α

  5. . . . . . . ͓໿ଋ Git ͸ ͬ͡ͱ͡Όͳ͍Α

    ͗ͬͱͩΑ
  6. . . . . . . ͸͡Ίʹ ͝ࢀՃ͋Γ͕ͱ͏͍͟͝·͢ɻ

  7. . . . . . . ͸͡Ίʹ ͝ࢀՃ͋Γ͕ͱ͏͍͟͝·͢ɻ ͔͠͠࿩͍͍ͯ͠΋ͷ΍Βɻ

  8. . . . . . . ͸͡Ίʹ ͝ࢀՃ͋Γ͕ͱ͏͍͟͝·͢ɻ ͔͠͠࿩͍͍ͯ͠΋ͷ΍Βɻ ಛʹͳʹ΋ཁٻ͕ͳ͔ͬͨͷͰద౰ʹ࿩͠

    ·͢ɻ
  9. . . . . . . Gitຊ ʮGit ʹΑΔόʔδϣϯ؅ཧʯ

  10. . . . . . . Gitຊ ʮGit ʹΑΔόʔδϣϯ؅ཧʯ Git

    ʹؔ͢Δຊ͸࢛࡭໨ɻ
  11. . . . . . . Gitຊ ʮGit ʹΑΔόʔδϣϯ؅ཧʯ Git

    ʹؔ͢Δຊ͸࢛࡭໨ɻ ଞͷຊͱࠩผ͢Δͷ͕೉͍͠ɻ
  12. . . . . . . Gitຊ ʮGit ʹΑΔόʔδϣϯ؅ཧʯ Git

    ʹؔ͢Δຊ͸࢛࡭໨ɻ ଞͷຊͱࠩผ͢Δͷ͕೉͍͠ɻ Git Λ஌Βͳ͍ਓʹʮ͜Εɺ໌೔·ͰʹಡΜ Ͳ͍ͯʯͱ౉ͨ͠Β͋Δఔ౓ཧղͰ͖Δຊʹ ͠·ͨ͠ɻ
  13. . . . . . . Gitຊ ʮGit ʹΑΔόʔδϣϯ؅ཧʯ Git

    ʹؔ͢Δຊ͸࢛࡭໨ɻ ଞͷຊͱࠩผ͢Δͷ͕೉͍͠ɻ Git Λ஌Βͳ͍ਓʹʮ͜Εɺ໌೔·ͰʹಡΜ Ͳ͍ͯʯͱ౉ͨ͠Β͋Δఔ౓ཧղͰ͖Δຊʹ ͠·ͨ͠ɻ ͓͔͛͞·Ͱਓؾ͋ΔΑ͏Ͱ͢ɻ
  14. . . . . . . Gitຊ ʮGit ʹΑΔόʔδϣϯ؅ཧʯ Git

    ʹؔ͢Δຊ͸࢛࡭໨ɻ ଞͷຊͱࠩผ͢Δͷ͕೉͍͠ɻ Git Λ஌Βͳ͍ਓʹʮ͜Εɺ໌೔·ͰʹಡΜ Ͳ͍ͯʯͱ౉ͨ͠Β͋Δఔ౓ཧղͰ͖Δຊʹ ͠·ͨ͠ɻ ͓͔͛͞·Ͱਓؾ͋ΔΑ͏Ͱ͢ɻ ͋Γ͕ͱ͏͍͟͝·͢ɻ
  15. ॾ஫ҙ . . . . . .

  16. . . . . . . ॾ஫ҙ ࢒೦ͳ͕Βࠓ೔ͷ࿩Λฉ͍ͯ΋ Git ͸ཧղͰ

    ͖·ͤΜɻ
  17. . . . . . . ॾ஫ҙ ࢒೦ͳ͕Βࠓ೔ͷ࿩Λฉ͍ͯ΋ Git ͸ཧղͰ

    ͖·ͤΜɻ ʮGit ʹΑΔόʔδϣϯ؅ཧʯΛಡΊ͹ཧղ Ͱ͖Δʂ
  18. . . . . . . ॾ஫ҙ ࢒೦ͳ͕Βࠓ೔ͷ࿩Λฉ͍ͯ΋ Git ͸ཧղͰ

    ͖·ͤΜɻ ʮGit ʹΑΔόʔδϣϯ؅ཧʯΛಡΊ͹ཧղ Ͱ͖Δʂ ษڧձΛظ଴͍ͯ͠Δਓ͸ޙͰผ్૬ஊͯ͠ ͍ͩ͘͞ɻ
  19. . . . . . . ॾ஫ҙ ࢒೦ͳ͕Βࠓ೔ͷ࿩Λฉ͍ͯ΋ Git ͸ཧղͰ

    ͖·ͤΜɻ ʮGit ʹΑΔόʔδϣϯ؅ཧʯΛಡΊ͹ཧղ Ͱ͖Δʂ ษڧձΛظ଴͍ͯ͠Δਓ͸ޙͰผ్૬ஊͯ͠ ͍ͩ͘͞ɻ ͜Ε͚ͩࢀՃऀ͕͍ΔͷͰ͍ΖΜͳҙݟΛฉ ͖͍ͨͰ͢ʂ
  20. . . . . . . ॾ஫ҙ ࢒೦ͳ͕Βࠓ೔ͷ࿩Λฉ͍ͯ΋ Git ͸ཧղͰ

    ͖·ͤΜɻ ʮGit ʹΑΔόʔδϣϯ؅ཧʯΛಡΊ͹ཧղ Ͱ͖Δʂ ษڧձΛظ଴͍ͯ͠Δਓ͸ޙͰผ్૬ஊͯ͠ ͍ͩ͘͞ɻ ͜Ε͚ͩࢀՃऀ͕͍ΔͷͰ͍ΖΜͳҙݟΛฉ ͖͍ͨͰ͢ʂ ࢀՃऀͰ৘ใڞ༗͍ͨ͠ͷͰɺਐߦΛ๦͛ͳ ͍ఔ౓ͰόϯόϯҙݟΛ͓ئ͍͠·͢ɻ
  21. . . . . . . ຊ೔ͷΞδΣϯμ . . .

    1 ஶऀ঺հ . . . 2 Git ࠷৽ͬΆ͍৘ใ . . . 3 Subversion ͔Β Git ΁Ҡߦ͢Δͱ͖ͷ໰୊ʹ ͍ͭͯ؆୯ʹޠΔʢখ઒͞Μʣ . . . 4 ফ͞ΕͨηΫγϣϯ: git bundle ʹ͍ͭͯޠͬ ͯΈΔʢؠদʣ . . . 5 ຊͷ಺༰ʹ͍࣭ͭͯٙԠ౴
  22. . . . . . . ஶऀ঺հ ؠদ ৴༸

  23. . . . . . . ஶऀ঺հ ؠদ ৴༸ খ઒

    ৳Ұ࿠
  24. . . . . . . ஶऀ঺հ ؠদ ৴༸ খ઒

    ৳Ұ࿠ લా ߞฏʢ౎߹ʹΑΓܽ੮ʣ
  25. . . . . . . ஶऀ঺հ ؠদ ৴༸ খ઒

    ৳Ұ࿠ લా ߞฏʢ౎߹ʹΑΓܽ੮ʣ ্઒ ७Ұʢ౎߹ʹΑΓܽ੮ʣ
  26. . . . . . . ࣗݾ঺հ ؠদ ৴༸ʢ͍Θ·ͭ ͷͿͻΖʣ

    Twitter: @iwamatsu Debian Project Official Developer OpenCV, Bluetooth, Mozc, ͳͲͷϝϯςφ ϯε ීஈ͸ձࣾһ Linux kernel, glibc, ϒʔτϩʔμͷ։ൃͳͲ
  27. Git ࠷৽ͬΆ͍৘ใ . . . . . .

  28. . . . . . . Git ࠷৽ͬΆ͍৘ใ ࠷৽͸ v1.7.9.2ʢ2012/2/22

    ϦϦʔεʣ v1.7.10 coming soon? git clone --single-branch git push --prune ࣍ظ mysysgit Ͱ UTF8 ରԠΒ͍͠
  29. Git ࠷৽ͬΆ͍৘ใ 1.7.0 ͔Βݸਓతʹॏཁͱࢥͬͨ΋ͷΛϐοΫΞο ϓ͠·ͨ͠ɻ . . . . .

    .
  30. . . . . . . Git ࠷৽ͬΆ͍৘ใ git am

    --keep-cr am ͢Δͱ͖ʹ CR Λҡ࣋ɻ
  31. . . . . . . Git ࠷৽ͬΆ͍৘ใ git am

    --keep-cr am ͢Δͱ͖ʹ CR Λҡ࣋ɻ git commit -S ίϛοτʹ PGP/GPG ॺ໊͕Ͱ͖ΔΑ͏ʹ ͳͬͨɻ
  32. . . . . . . Git ࠷৽ͬΆ͍৘ใ git am

    --keep-cr am ͢Δͱ͖ʹ CR Λҡ࣋ɻ git commit -S ίϛοτʹ PGP/GPG ॺ໊͕Ͱ͖ΔΑ͏ʹ ͳͬͨɻ git cherry-pick start..end git cherry-pick Ͱ ൣғࢦఆՄೳʹɻ
  33. . . . . . . Git ࠷৽ͬΆ͍৘ใ git am

    --keep-cr am ͢Δͱ͖ʹ CR Λҡ࣋ɻ git commit -S ίϛοτʹ PGP/GPG ॺ໊͕Ͱ͖ΔΑ͏ʹ ͳͬͨɻ git cherry-pick start..end git cherry-pick Ͱ ൣғࢦఆՄೳʹɻ git branch --edit-descriptin ϒϥϯνʹઆ໌Λ௥ՃͰ͖ΔΑ͏ʹͳͬ ͨɻ.git/config ʹઃఆ͞ΕΔɻ
  34. . . . . . . Git ࠷৽ͬΆ͍৘ใ git cherry-pick,

    git revert Ͱ --strategy ͕࢖͑ΔΑ͏ʹͳͬͨɻ
  35. . . . . . . Git ࠷৽ͬΆ͍৘ใ git cherry-pick,

    git revert Ͱ --strategy ͕࢖͑ΔΑ͏ʹͳͬͨɻ git clean -e ࢦఆͨ͠ϑΝΠϧΛແࢹͯ͠ clean ͢Δɻ .git/info/exclude ϑΝΠϧ΋ࢀরɻ
  36. . . . . . . Git ࠷৽ͬΆ͍৘ใ git cherry-pick,

    git revert Ͱ --strategy ͕࢖͑ΔΑ͏ʹͳͬͨɻ git clean -e ࢦఆͨ͠ϑΝΠϧΛແࢹͯ͠ clean ͢Δɻ .git/info/exclude ϑΝΠϧ΋ࢀরɻ git blame --show-email ͦͷ··ɻ
  37. . . . . . . Git ࠷৽ͬΆ͍৘ใ git checkout

    --detach ࢦఆͨ͠ refs ΛνΣ οΫΞ΢τͰ͖Δɻແ໊ ϒϥϯνਥޚ༻ୡɻ $ git checkout master Already on ’master’ $ git checkout ‘git rev-parse master‘ $ git checkout master $ git checkout --detach
  38. . . . . . . Git ࠷৽ͬΆ͍৘ใ git init

    --separate gitdir .git Λ෼཭͢Δɻ $ cd /tmp ; mkdir a; cd a $ git init --separate ../b Initialized empty Git repository in /tmp/b/ $ cat .git gitdir: /tmp/b
  39. . . . . . . Git ࠷৽ͬΆ͍৘ใ git stash

    save -u --include--untracked untracked ϑΝΠϧ΋ stash ͢Δɻ $ touch test $ ls moge test $ git stash save stash-test No local changes to save $ git stash save -u stash-test Saved working directory and index state On master: stash- HEAD is now at 5a4a0a0 commit $ ls moge
  40. . . . . . . Git ࠷৽ͬΆ͍৘ใ git rease

    -i exec αϙʔτ $ git rebase -i test pick c043a7d Add X pick ae24543 Add Y exec cat data0 pick 8d81049 Add Z pick 1e27bd2 Add C ...... Executing: cat data0 X Y Successfully rebased and updated refs/heads/master.
  41. . . . . . . Git ࠷৽ͬΆ͍৘ใ git reset

    --keep git reset --merge
  42. . . . . . . Git ࠷৽ͬΆ͍৘ใ ॲཧ WC

    index HEAD hard R R R mixed - R R soft - - R merge R0 R R keep R1 R R R: Reset R0: WC ͱ index ͷͲͪΒ͔͕ HEAD ͱҟͳΔ৔ ߹ʹ͸ΤϥʔʹͳΔɻadd ͞Εͨ΋ͷ͸ WC ʹ ࢒Δɻ R1: WC ͷΈͷมߋ͸ΤϥʔʹͳΔɻWC ͱ index ͷมߋ͸Ϧηοτ͞ΕΔɻ add ͞Εͨ΋ͷ͸ফ͞ΕΔɻ
  43. . . . . . . Git ࠷৽ͬΆ͍৘ใ gnu patch

    ͕ git ܗࣜΛαϙʔτ (Not yet released)ɻ
  44. . . . . . . Git ࠷৽ͬΆ͍৘ใ ͜͜ಡΉͱ໘ന͍ʢᖛ໺͞Μ͕ߋ৽͍ͯ͠Δʣ http://git-blame.blogspot.com/

  45. πʔϧͷ࿩ . . . . . .

  46. . . . . . . tig tig: ίϯιʔϧ͔Β࢖͑Δ git

    ΠϯλʔϑΣΠε
  47. . . . . . . tig Vim ʹ͍ۙૢ࡞ײͰ࢖͑Δɻ ϏϡʔΞͱͯ͠͸࢖͍΍͍͢ɻ

    Git ΠϯλʔϑΣΠεͱͯ͠͸ඍົʢදࣔʹ ϦϑϨογϡૢ࡞͕ඞཁͩͬͨΓʣ ɻ
  48. . . . . . . TortoiseGit, GitX, Gity, Gitbox

    TortoiseGit: Windows ༻ GUI GitX: OS X ༻ GUI Gity: OS X ༻ GUI Gitbox: OS X ༻ GUI ࢖ͬͯແ͍ͷͰΑ͘Θ͔Βͳ͍Ͱ͢ɻ
  49. . . . . . . stgit/guilt stgit/guilt: ύονΛελοΫͱͯ͠ߟ͑Δπʔϧ

  50. . . . . . . stgit/guilt ύονηοτΛ؅ཧ͍ͨ͠ਓ޲͚ɻ

  51. . . . . . . stgit/guilt ύονηοτΛ؅ཧ͍ͨ͠ਓ޲͚ɻ ίϛοτͨ͠ॱ൪ʢཤྺʣ͸ॏཁͰ͸ͳ͘ɺ ݁Ռʹ໰୊͕ͳ͍ͳΒ

    OK ͱ͍͏ߟ͑ɻ
  52. . . . . . . stgit/guilt ύονηοτΛ؅ཧ͍ͨ͠ਓ޲͚ɻ ίϛοτͨ͠ॱ൪ʢཤྺʣ͸ॏཁͰ͸ͳ͘ɺ ݁Ռʹ໰୊͕ͳ͍ͳΒ

    OK ͱ͍͏ߟ͑ɻ ϩʔΧϧϦϙδτϦͰύονΛೖΕସ͑·͘ Γ͍ͨͱ͔ɻ
  53. . . . . . . stgit/guilt ύονηοτΛ؅ཧ͍ͨ͠ਓ޲͚ɻ ίϛοτͨ͠ॱ൪ʢཤྺʣ͸ॏཁͰ͸ͳ͘ɺ ݁Ռʹ໰୊͕ͳ͍ͳΒ

    OK ͱ͍͏ߟ͑ɻ ϩʔΧϧϦϙδτϦͰύονΛೖΕସ͑·͘ Γ͍ͨͱ͔ɻ A ← B ← C ΋ B ← C ← A ΋݁Ռతʹಉ͡ ΋ͷ͕Ͱ͖Ε͹ OKɻ
  54. . . . . . . stgit/guilt ύονηοτΛ؅ཧ͍ͨ͠ਓ޲͚ɻ ίϛοτͨ͠ॱ൪ʢཤྺʣ͸ॏཁͰ͸ͳ͘ɺ ݁Ռʹ໰୊͕ͳ͍ͳΒ

    OK ͱ͍͏ߟ͑ɻ ϩʔΧϧϦϙδτϦͰύονΛೖΕସ͑·͘ Γ͍ͨͱ͔ɻ A ← B ← C ΋ B ← C ← A ΋݁Ռతʹಉ͡ ΋ͷ͕Ͱ͖Ε͹ OKɻ quilt ͷ series ͕ϒϥϯνʹͳ͍ͬͯΔɻ ݩ quilt Ϣʔβ͕࢖͍ͬͯΔ৔߹͕ଟ͍ɻ
  55. Subversion͔ΒGit΁ Ҡߦ͢Δͱ͖ͷ໰୊ʹ͍ͭͯ؆୯ ʹޠΔ ɹ খ઒ ৳Ұ࿠ . . . .

    . .
  56. ຊ͔Βফ͞ΕͨηΫγϣϯ: git bundle ʹ͍ͭͯޠͬͯΈΔ ɹ ؠদ ৴༸ . . .

    . . .
  57. ຊͷ಺༰ʹ͍ͭͯͷ࣭ٙԠ౴ . . . . . .

  58. ࠓޙͷ࿩ . . . . . .

  59. . . . . . . ࠓޙͷ࿩ Git ษڧձʁ Git

    ϋϯζΦϯʁ Git ίʔυϦʔςΟϯάʁ
  60. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ . . . . . .

  61. ͜͜·Ͱ͕ϓϨθϯͰɺҎԼ͸్தͰग़࣭ͨ໰ͳ ͲΛॻ͍͓͖ͯ·͢ɻ ଞʹ͜Μͳͷ͋ͬͨΑͱ͔͋Γ·ͨ͠Βڭ͑ͯ͘ ͍ͩ͞ɻ . . . . . .

  62. . . . . . . git cherry-pick ͬͯͲͷΑ͏ͳ࣌ʹ࢖͏ ͷͰ͔͢?

    طʹ͋ΔίϛοτΛνΣ οΫΞ΢τ͍ͯ͠Δϒϥ ϯνʹద༻͍ͨ͠৔߹ʹ࢖͍·͢ɻྫ͑͹ master ϒϥϯνͰ͋ΔόάΛमਖ਼ͨ͠ɻͦΕ͕ίϛοτ A ͩͱ͠·͢ɻͦͷόά͸ϦϦʔε༻ϒϥϯνʹ ΋͋Δ͜ͱ͕Θ͔͍ͬͯͯ௚͍ͨ͠ɻίϛοτ A ΛϦϦʔε༻ϒϥϯνʹద༻͢Δ͜ͱΑʹͬͯम ਖ਼͞ΕΔͳΒɺϦϦʔε༻ϒϥϯνͰ git cherry-pick A ͱ࣮ߦ͢Δɻ
  63. . . . . . . git clone --separate ͨ࣌͠ͷར఺

    ͸ʁ ؒҧͬͯσΟϨΫτϦ͝ͱফͯ͠͠·ͬͨ࣌ʹɺ ࠷ѱϦϙδτϦ͸࢒͍ͬͯΔͷͰ෮چ͕Ͱ͖ΔՄ ೳੑ͕͋Δɺͱ͔ɻ·ͨ͸ෳ਺ͷνΣ οΫΞ΢τ ͨ͠ϫʔΩϯάίϐʔΛ࣋ͯΔͱ͔ɻgit archive Ͱ΋ಉ͡Α͏ͳ͜ͱ͕Ͱ͖·͚͢ͲɺϦϙδτϦ ͱͷؔ܎͕σʔλతʹ੾ΕΔͷͰخ͘͠ͳ͍͔ ͳɺͱࢥ͍·͢ɻ
  64. . . . . . . Ͱ͸ɺෳ਺ͷϫʔΩϯάίϐʔΛ࣋ͬ ͍ͯΔͱ͖ʹ commit ͨ͠ΒͲ͏ͳΔ

    ͷʁ ָ͍͜͠ͱʹͳΓ·͢ɻͪΌΜͱ ϦϑΝϨϯεΛ ࢦఆͯ͠ίϛοτ͢ΔΑ͏ʹ͠·͠ΐ͏ɻ
  65. . . . . . . ͳͥ git pull ͸

    fetch + merge ͳΜͰ͢ ͔ʁ rebase ͡Όͳ͍ͷʁ merge ͸ίϛοτ͕ഁյ͞Εͳ͍ (ίϛοτϋο γϡ஋͕มΘΒͳ͍) ͔Βͩͱࢥ͍·͢ɻrebase ͸յ͞ΕΔɻ҆શଆ͸ merge ͳͷͰɻ