*
    〜Git入門をあえてsvnから入る、の巻〜
* なぜgitか?なぜgit-svnか?
* Gitのインストール
* git svn clone、trunkとmasterの関係
* コミット、そしてプッシュ
* ブランチ(切る。作業する。リベース)
* ブランチしたらプッシュの前に
* その他のtips
* まとめ

                            *
*
忍者のごとく、subversionに潜む
*Gitにはローカルレポジトリ=自由がある!
 * ひとりひとりが専用のレポジトリ
 * バージョン管理の便利さを気兼ねなく
* コミット済みのコードを変更できる
 * あのコミットを無かった事に
 * Rev(21)とRev(25)をまとめたかった・・・
 * 機能追加にまじってバグ修正かよ・・・
 * つまり履歴が奇麗に!


                   *
*すぐにgitに移行できるとは限らない
  *チームメイトへの配慮
  *社の方針
*git-svn
  *gitの使い勝手+subversionの結果
  *Svn派にバレずにを邪魔せずに使える


            *
*
    ぶっちゃけ公式見れば良いんだけどね
見ればわかる!
…というわけにも行かないので
* コンソールは公式からどうぞ
 * http://git-scm.com/downloads
* GUI(Mac)
 * 私はSourceTree
 * AppStoreで検索。もしくはggr
* GUI(Win)
 * Tortoise gitがオススメらしいよ
 * ぐぐってみてね


   *
*
    Gitとsubversionをつなぐもの
*Subversionにおけるチェックアウト
*Gitではgit clone
 * リモートブランチをローカルリポジトリにコピー
 *これをsubversionに対して行える
*svn時代の履歴もだいたい引き継げます




             *
* $ git svn clone –s リポジトリのURL
  * -sオプションは—stdlyoutの略
  * trunk, tags, branchesをよしなにコンバート




                                      *
* $ git branch –r
   * リモートブランチ一覧
   * trunk:svnのtrunk
* $ git   branch
   * ブランチの一覧
   * master:基本的に弄るのはこっち




                          *
*
    きらめくstageでまた会える!
* gitにはstageという考え方があります
     * 編集した内容すべてをコミットするとは限らない
     * Stageしたものがコミットされる
    * コードが皆に行き渡るまで
     * 編集内容をステージ
     * ステージをコミット
     * コミットをプッシュ
     * 皆がプルしてようやく手元に


*
* まずは適当に自分の名前のファイルでも作って
* $ git add .
 * ステージする
* $ git commit -m‖メッセージ‖
 * ―メッセージ‖を添えてコミットする

* この時点ではまだsubversionに影響なし


                            *
* $ git svn dcommit –n
  * コミットされる内容の確認
  * nはno commitのnです。たぶん
* $ git svn dcommit
  * 実際にコミット

* ちなみに
  * $ git config user.name ―Your Name‖
  * $ git config user.email you@email.com
* 設定しておくとgitに移行した時に楽
                                            *
* 先に誰かがコミットしてた!
* 問題なければもう一回git svn dcommitでOK
* とはいえコンフリクトする時にはする
 * 出来るうちにsvn update的な事を




                *
* $ git svn rebase
  * $ git svn fetchとgit merge trunkの融合
* ただし編集中のファイルがあるとできない
  * コミットする
  * Stashを使ってみる
* git stash と git stash pop
  * Git stash
  * Git svn rebase
  * Git stash pop
  * 預けて、updateして、引き出す
                                         *
*
切る、作業する、リベースする
* わりと本題だったり
* ブランチ自体はsubversionと大差無し
 * しかし気軽さと便利さが違う
* チェックアウトとかいくつかの用語が違う
 * 勘違いしないように、恐れないように

* ブランチを作り、履歴の汚れなんか気にせずに
コミット、コミット、コミット!!


                    *
* $git checkout –b test
  * 今いる場所からtestブランチを作成して移動
* $git checkout –b test master
  * masterブランチからtestブランチを作成して移動
* $git branch test
  * 作成するけど移動はしない

* タグの場所からも作れる

                                 *
* $git branch –d test
  * testブランチを削除
* $git branch –D test
  * testブランチを強制削除
  * どこにもマージされてないけど気にしないぜ!




                        *
*
    ―潜む‖極意ここにあり
* git svn dcommitで全コミットが伝わる
 * そのままではsvnのログが・・・
 * しかし自由にコミットしたい

* コミットを整理整頓して見通しよくしよう
 * 他のブランチで作業してmasterにマージ
 * 歴史を改変しコミットを整理整頓



             *
* マスターに戻ってBRANCHをマージ
 * $git checkout master
 * $git merge –no-ff BRANCH
 * コメントはまとめてもらえないのでまた書く

* コメントを大事にしたい
 * $git merge –squash BRANCH
 * コミットされないが、コメントをまとめてくれる
 * 履歴がBRANCHと繋がらないので若干ややこしい
 * $git commit が必要
                              *
元の状態




               *
   http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
--ff(標準のmerge)




                 *
     http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
--no-ff




                      *
          http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
--squash




                   *
       http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
* コミットログ
 * 機能Aを追加
 * 機能Bを追加
 * あれを修正
 * 機能Bを修正
 * 機能Aを更新
 * 機能Aを更新
 * 機能Bのtypoを修正
* かっこわるい!!
                 *
* 新しいコミットログ
 * 完成された機能Aを追加
 * Typoなんてない機能Bを追加
 * あれを修正
* このすっきり感が理想

* あとからでもこんな奇麗な履歴にできる。
                 そう、Gitならね・・・


                     *
* git rebase -i
  * おそらく私がもっとも多用するコマンド
  * 大好き。
* コミットを三つの呪文で理想のカタチへ
  * Edit(e)
  * Fix(f)
  * Squash(s)
* git rebase –i HEAD^^
  * 二つ前まで遡る(^の数に対応)
                         *
*
* git commit –amendでコメントの書き直し
* git add –p でこまかくステージ
* git log --graph --branches –oneline
* git status




                        *
*

Git svnではじめる忍者のごとく潜むgit

  • 1.
    * 〜Git入門をあえてsvnから入る、の巻〜
  • 2.
    * なぜgitか?なぜgit-svnか? * Gitのインストール *git svn clone、trunkとmasterの関係 * コミット、そしてプッシュ * ブランチ(切る。作業する。リベース) * ブランチしたらプッシュの前に * その他のtips * まとめ *
  • 3.
  • 4.
    *Gitにはローカルレポジトリ=自由がある! * ひとりひとりが専用のレポジトリ * バージョン管理の便利さを気兼ねなく * コミット済みのコードを変更できる * あのコミットを無かった事に * Rev(21)とRev(25)をまとめたかった・・・ * 機能追加にまじってバグ修正かよ・・・ * つまり履歴が奇麗に! *
  • 5.
    *すぐにgitに移行できるとは限らない *チームメイトへの配慮 *社の方針 *git-svn *gitの使い勝手+subversionの結果 *Svn派にバレずにを邪魔せずに使える *
  • 6.
    * ぶっちゃけ公式見れば良いんだけどね
  • 7.
  • 8.
    * コンソールは公式からどうぞ *http://git-scm.com/downloads * GUI(Mac) * 私はSourceTree * AppStoreで検索。もしくはggr * GUI(Win) * Tortoise gitがオススメらしいよ * ぐぐってみてね *
  • 9.
    * Gitとsubversionをつなぐもの
  • 10.
    *Subversionにおけるチェックアウト *Gitではgit clone *リモートブランチをローカルリポジトリにコピー *これをsubversionに対して行える *svn時代の履歴もだいたい引き継げます *
  • 11.
    * $ gitsvn clone –s リポジトリのURL * -sオプションは—stdlyoutの略 * trunk, tags, branchesをよしなにコンバート *
  • 12.
    * $ gitbranch –r * リモートブランチ一覧 * trunk:svnのtrunk * $ git branch * ブランチの一覧 * master:基本的に弄るのはこっち *
  • 13.
    * きらめくstageでまた会える!
  • 14.
    * gitにはstageという考え方があります * 編集した内容すべてをコミットするとは限らない * Stageしたものがコミットされる * コードが皆に行き渡るまで * 編集内容をステージ * ステージをコミット * コミットをプッシュ * 皆がプルしてようやく手元に *
  • 15.
    * まずは適当に自分の名前のファイルでも作って * $git add . * ステージする * $ git commit -m‖メッセージ‖ * ―メッセージ‖を添えてコミットする * この時点ではまだsubversionに影響なし *
  • 16.
    * $ gitsvn dcommit –n * コミットされる内容の確認 * nはno commitのnです。たぶん * $ git svn dcommit * 実際にコミット * ちなみに * $ git config user.name ―Your Name‖ * $ git config user.email you@email.com * 設定しておくとgitに移行した時に楽 *
  • 17.
    * 先に誰かがコミットしてた! * 問題なければもう一回gitsvn dcommitでOK * とはいえコンフリクトする時にはする * 出来るうちにsvn update的な事を *
  • 18.
    * $ gitsvn rebase * $ git svn fetchとgit merge trunkの融合 * ただし編集中のファイルがあるとできない * コミットする * Stashを使ってみる * git stash と git stash pop * Git stash * Git svn rebase * Git stash pop * 預けて、updateして、引き出す *
  • 19.
  • 20.
    * わりと本題だったり * ブランチ自体はsubversionと大差無し * しかし気軽さと便利さが違う * チェックアウトとかいくつかの用語が違う * 勘違いしないように、恐れないように * ブランチを作り、履歴の汚れなんか気にせずに コミット、コミット、コミット!! *
  • 21.
    * $git checkout–b test * 今いる場所からtestブランチを作成して移動 * $git checkout –b test master * masterブランチからtestブランチを作成して移動 * $git branch test * 作成するけど移動はしない * タグの場所からも作れる *
  • 22.
    * $git branch–d test * testブランチを削除 * $git branch –D test * testブランチを強制削除 * どこにもマージされてないけど気にしないぜ! *
  • 23.
    * ―潜む‖極意ここにあり
  • 24.
    * git svndcommitで全コミットが伝わる * そのままではsvnのログが・・・ * しかし自由にコミットしたい * コミットを整理整頓して見通しよくしよう * 他のブランチで作業してmasterにマージ * 歴史を改変しコミットを整理整頓 *
  • 25.
    * マスターに戻ってBRANCHをマージ *$git checkout master * $git merge –no-ff BRANCH * コメントはまとめてもらえないのでまた書く * コメントを大事にしたい * $git merge –squash BRANCH * コミットされないが、コメントをまとめてくれる * 履歴がBRANCHと繋がらないので若干ややこしい * $git commit が必要 *
  • 26.
    元の状態 * http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
  • 27.
    --ff(標準のmerge) * http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
  • 28.
    --no-ff * http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
  • 29.
    --squash * http://d.hatena.ne.jp/sinsoku/20111025/1319497900 より引用
  • 30.
    * コミットログ *機能Aを追加 * 機能Bを追加 * あれを修正 * 機能Bを修正 * 機能Aを更新 * 機能Aを更新 * 機能Bのtypoを修正 * かっこわるい!! *
  • 31.
    * 新しいコミットログ *完成された機能Aを追加 * Typoなんてない機能Bを追加 * あれを修正 * このすっきり感が理想 * あとからでもこんな奇麗な履歴にできる。 そう、Gitならね・・・ *
  • 32.
    * git rebase-i * おそらく私がもっとも多用するコマンド * 大好き。 * コミットを三つの呪文で理想のカタチへ * Edit(e) * Fix(f) * Squash(s) * git rebase –i HEAD^^ * 二つ前まで遡る(^の数に対応) *
  • 33.
  • 34.
    * git commit–amendでコメントの書き直し * git add –p でこまかくステージ * git log --graph --branches –oneline * git status *
  • 35.