Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

Avatar for Nobuhiro Iwamatsu

Nobuhiro Iwamatsu

February 29, 2012
Tweet

More Decks by Nobuhiro Iwamatsu

Other Decks in Programming

Transcript

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ϦϦʔεʣ v1.7.10 coming soon? git clone --single-branch git push --prune ࣍ظ mysysgit Ͱ UTF8 ରԠΒ͍͠
  15. . . . . . . Git ࠷৽ͬΆ͍৘ใ git am

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

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

    --keep-cr am ͢Δͱ͖ʹ CR Λҡ࣋ɻ git commit -S ίϛοτʹ PGP/GPG ॺ໊͕Ͱ͖ΔΑ͏ʹ ͳͬͨɻ git cherry-pick start..end git cherry-pick Ͱ ൣғࢦఆՄೳʹɻ
  18. . . . . . . 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 ʹઃఆ͞ΕΔɻ
  19. . . . . . . Git ࠷৽ͬΆ͍৘ใ git cherry-pick,

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

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

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

    --detach ࢦఆͨ͠ refs ΛνΣ οΫΞ΢τͰ͖Δɻແ໊ ϒϥϯνਥޚ༻ୡɻ $ git checkout master Already on ’master’ $ git checkout ‘git rev-parse master‘ $ git checkout master $ git checkout --detach
  23. . . . . . . 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
  24. . . . . . . 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
  25. . . . . . . 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.
  26. . . . . . . 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 ͞Εͨ΋ͷ͸ফ͞ΕΔɻ
  27. . . . . . . Git ࠷৽ͬΆ͍৘ใ gnu patch

    ͕ git ܗࣜΛαϙʔτ (Not yet released)ɻ
  28. . . . . . . tig Vim ʹ͍ۙૢ࡞ײͰ࢖͑Δɻ ϏϡʔΞͱͯ͠͸࢖͍΍͍͢ɻ

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

    TortoiseGit: Windows ༻ GUI GitX: OS X ༻ GUI Gity: OS X ༻ GUI Gitbox: OS X ༻ GUI ࢖ͬͯແ͍ͷͰΑ͘Θ͔Βͳ͍Ͱ͢ɻ
  30. . . . . . . stgit/guilt ύονηοτΛ؅ཧ͍ͨ͠ਓ޲͚ɻ ίϛοτͨ͠ॱ൪ʢཤྺʣ͸ॏཁͰ͸ͳ͘ɺ ݁Ռʹ໰୊͕ͳ͍ͳΒ

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

    OK ͱ͍͏ߟ͑ɻ ϩʔΧϧϦϙδτϦͰύονΛೖΕସ͑·͘ Γ͍ͨͱ͔ɻ A ← B ← C ΋ B ← C ← A ΋݁Ռతʹಉ͡ ΋ͷ͕Ͱ͖Ε͹ OKɻ quilt ͷ series ͕ϒϥϯνʹͳ͍ͬͯΔɻ ݩ quilt Ϣʔβ͕࢖͍ͬͯΔ৔߹͕ଟ͍ɻ
  32. . . . . . . ࠓޙͷ࿩ Git ษڧձʁ Git

    ϋϯζΦϯʁ Git ίʔυϦʔςΟϯάʁ
  33. . . . . . . git cherry-pick ͬͯͲͷΑ͏ͳ࣌ʹ࢖͏ ͷͰ͔͢?

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

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

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

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