2012-07-30
死んで覚える本当のGitの使い方
3月からAimingという会社で働いているのですが、会社でGitとGithubを使い込まされ、なんとか最近はものになってきました。
そんな僕から見て、最近流行っているGit初心者向け記事は、「僕らが本当に知りたかったこと」が欠けているようにしか思えません。
そこで、本当のGitの使い方を僕が皆さんに伝授しようと思いました。
なにはともかく使ってみよう
前提として、皆様のお手元にはすでにGitがインストールされているものとします。
今回はエディタとしてDungeonCrawl StoneSoupを使います。
Downloads « Dungeon Crawl Stone Soup http://crawl.develz.org/wordpress/downloads
Dungeon Crwal Stone Soup は今一番ホットなオープンソースのローグライクです。風来のシレンやトルネコのジャンルといったほうが適切でしょうか。Windows/Mac/Linuxに対応。最近はWebSocketで他人のオンラインプレイも視聴できるそうです。
プロジェクトを作成する
Git初心者の方は、初心者向きと言われる Minotaur - Monk がオススメです。序盤はとにかく敵に向かって歩いて行くだけでどんどん薙ぎ倒せます。
ゲームが始まりました。
なお、移動はhjklのVimキーバインドです。
ただ、いかに屈強な Minotaur - Monk といえど、レベルをあげて物理で殴るだけでは勝てません。そこで私たちはGit力を高めてこの問題を解決することにしましょう。
Git で進捗管理
DungeonCrawlStoneSoup では、セーブデータはキャラクター名.cs というファイルに保存されます。Macなら~/Library/Application Support/Dungeon Crawl Stone Soup/saves/ というディレクトリにあります。*1
これをgitに登録しましょう。
$ cd ~/Library/Application Support/Dungeon Crawl Stone Soup/saves/ $ git init Initialized empty Git repository in /Users/mizchi/Library/Application Support/Dungeon Crawl Stone Soup/saves/.git/ $ git add mizchi.cs $ git commit -m "new Game minotaur - monk" [master (root-commit) ddb24a2] new Game minotaur - monk 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mizchi.cs
ゲームを進めましょう
レベル2になりました。本来ならオートセーブされるこのゲームですが、ここでGitの編集を行いましょう。
$ git commit -am "level2"
更にゲームを進めます
Sigmundとかいうモンスターに殴りかかったら死にました。残念、あなたの冒険はここで終わってしまった。
なんてことにならないように、ここで一旦エディタを終了して、最後の編集点にまで戻りましょう。(エディタの終了前に閉じるとエディタに上書きされる可能性があります)
$ git reset HEAD --hard
これでlevel2になった時点に戻りました。
Sigmundは序盤で出会うユニークの中でも一番危険度が高い強敵です。次に出会ったときはなるだけ手を出さないようにしたいですね。
次の探索者はもっとうまくやってくれることでしょう。
ダンジョン探索の注意点
- 任意の編集戻れるように細かくコミットしましょう。
- 危険なVaultをみつけたらブランチを切りましょう。死の危険があります。
- 取り返しがつかないミスをすることもあるでしょう。コミットが粗いとだいぶ前に戻される可能性があります。
- git reflog でトランザクションのような何かが見えます。git checkout なんかのID で、任意の編集点に戻れます。
なにが言いたかったかというと
必要に迫られれば覚えるから100回死んでこい。
*2
- Twitter / @Real_analysis
- Twitter / @retaotwitt
- Twitter / @h_hiro_
- Twitter / @umezawa_takeshi
- Twitter / @ryosms
- Twitter / @eslar
- Twitter / @YukiNishi_1979
- Twitter / @_Bsoo
- Twitter / @yukikeiichi
- Twitter / @Peranikov
- Twitter / @kyubuns
- Twitter / @ayafmy
- Twitter / @mayahu32
- Twitter / @namaedayo
- Twitter / @tofu_null
- Twitter / @ymnttt
- Twitter / @pf_packet
- Twitter / @eldesh
- Twitter / @naka_aki_spl
- Twitter / @aruokaR
- Twitter / @Cernobyl
- Twitter / @wankomagic
- Twitter / @redredstar
- Twitter / @ikenyal
- Twitter / @aWebprogrammer
- Twitter / @k_ohtomi
- 126 http://b.hatena.ne.jp/
- 107 http://t.co/yF0Y0ulW
- 76 http://www-ig-opensocial.googleusercontent.com/gadgets/ifr?exp_rpc_js=1&exp_track_js=1&url=http://www.hatena.ne.jp/tools/gadget/bookmark/bookmark_gadget.xml&container=ig&view=default&lang=ja&country=JP&sanitize=0&v=3a9581e43da64162&parent=ht
- 72 http://b.hatena.ne.jp/hotentry
- 67 http://reader.livedoor.com/reader/
- 57 http://b.hatena.ne.jp/hotentry/it
- 57 http://t.co/CqL5X7xc
- 52 http://t.co/4sZt4fRv
- 40 http://b.hatena.ne.jp/entrylist/it
- 33 http://www.facebook.com/l.php?u=http://d.hatena.ne.jp/mizchi/20120730/1343654602&h=oAQEt5C08AQHKKz9RNZPKgWoMc5t-sL5AJV6pnQOlPvNimQ