git-svn intro

Post on 27-Jun-2015

2.532 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

git-svn intro

TRANSCRIPT

git-svn intro

Kenichirou Oyama (k1LoW)

DistributedHoge 2

• type:– Programmer (PHPer)

• Emacs Level:– Enjoy Emacs Lisp

• Products:– cake.el– drill-instructor.el(鬼軍曹.el)– tokyotyrant_php– and more.

• membership:– Fusic Co.,Ltd >> http://fusic.co.jp

– codecheck.in >> http://trac.codecheck.inand 101000code / 3rdSTONE

(self-introduce "k1LoW")

DistributedHoge 3

What is git-svn?

DistributedHoge 4

What is git-svn?

• GitリポジトリとSVNリポジトリを同期するためのもの

• GitとSVNの利点を享受することができる

DistributedHoge 5

SVN• 基本は1つのリポジトリ• リポジトリからcheckoutしたワーキングコピーで作業

をする– ワーキングコピーはあくまで作業用

• →[edit]→commit→update→[edit]→• 利点:リポジトリが1つなのでソースの作業履歴が1つに

集まる– きっちり集中管理しないといけないときに仕様上そうなってい

るので何も考えなくてよい• 欠点:commitは1つしかないリポジトリにしかできない

– commit権限を持たない人は作業履歴をそのSVN管理化では残すこと(commitすること)ができない→patch?

DistributedHoge 6

SVN

svn co

svn ci

svn up

svnリポジトリ

ワーキングコピー

DistributedHoge 7

Git• 基本は分散した複数のリポジトリ• リポジトリからcloneしたリポジトリで作業をする

– cloneされたリポジトリもcloneしたリポジトリもリポジトリ• →[edit]→commit→push→pull→[edit]→• 利点:それぞれがリポジトリを持つのでそれぞれか作業

履歴を残す(commitする)ことができる– みんな平等。分散。– ネットワークが切れていてもcommitできる。

• 欠点:(プロジェクトの性質によっては)どれがマスターのリポジトリかわからなくなると困る– 運用ルールが大事。

DistributedHoge 8

Git

Gitリポジトリ

git clonegit pushgit pull

Gitリポジトリ

Gitリポジトリ

git commit

DistributedHoge 9

SVNでのワークフローある開発者のかつての日常

DistributedHoge 10

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

DistributedHoge 11

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

DistributedHoge 12

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

DistributedHoge 13

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

DistributedHoge 14

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

DistributedHoge 15

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

DistributedHoge 16

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

DistributedHoge 17

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

DistributedHoge 18

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

DistributedHoge 19

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

DistributedHoge 20

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

DistributedHoge 21

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

DistributedHoge 22

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

DistributedHoge 23

githubでのワークフローtokyotyrant_php開発日常

DistributedHoge 24

What is github?• http://github.com• Gitのプロジェクトホスティングサー

ビス–CodeReposやcodecheck.inみたいなもの

• Gitの分散性を利用したソーシャルな側面があることが特徴–分散リポジトリならでは–followとかwatchとか

DistributedHoge 25

githubでのワークフロー1. githubでリポジトリ作成

• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone

• git clone git@github.com:k1LoW/tokyotyrant_php.git

3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 26

githubでのワークフロー1. githubでリポジトリ作成

• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone

• git clone git@github.com:k1LoW/tokyotyrant_php.git

3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 27

githubでのワークフロー1. githubでリポジトリ作成

• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone

• git clone git@github.com:k1LoW/tokyotyrant_php.git

3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 28

githubでのワークフロー1. githubでリポジトリ作成

• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone

• git clone git@github.com:k1LoW/tokyotyrant_php.git

3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 29

githubでのワークフロー1. githubでリポジトリ作成

• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone

• git clone git@github.com:k1LoW/tokyotyrant_php.git

3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 30

githubでのワークフロー1. githubでリポジトリ作成

• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone

• git clone git@github.com:k1LoW/tokyotyrant_php.git

3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 31

githubでのワークフロー1. githubでリポジトリ作成

• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone

• git clone git@github.com:k1LoW/tokyotyrant_php.git

3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 32

githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト

リにまとめてmerge• git checkout master• git merge –squash rdb• git commit

9. リモートリポジトリにpush• git push origin

10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1

11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug

DistributedHoge 33

githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト

リにまとめてmerge• git checkout master• git merge –squash rdb• git commit

9. リモートリポジトリにpush• git push origin

10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1

11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug

DistributedHoge 34

githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト

リにまとめてmerge• git checkout master• git merge –squash rdb• git commit

9. リモートリポジトリにpush• git push origin

10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1

11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug

DistributedHoge 35

githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト

リにまとめてmerge• git checkout master• git merge –squash rdb• git commit

9. リモートリポジトリにpush• git push origin

10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1

11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug

DistributedHoge 36

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。– git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

DistributedHoge 37

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。– git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

DistributedHoge 38

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。1. git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

DistributedHoge 39

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。1. git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

DistributedHoge 40

git-svnでのワークフローある開発者の今の日常

DistributedHoge 41

git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成

• git branch calendar• git checkout calendar

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 42

git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成

• git branch calendar• git checkout calendar

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 43

git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成

• git branch calendar• git checkout calendar

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 44

git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成

• git branch calendar• git checkout calendar

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 45

git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成

• git branch calendar• git checkout calendar

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 46

git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成

• git branch calendar• git checkout calendar

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 47

git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成

• git branch calendar• git checkout calendar

4. 編集5. git commit6. 編集7. git commit

DistributedHoge 48

git-svnでのワークフロー8. いい感じになったのでローカルのマスターリ

ポジトリにまとめてmerge• git checkout master• git merge –squash calendar• git commit

9. svnリポジトリにdcommit• git svn dcommit

10. ノリでbranchを作成• git branch bug_fix• git checkout bug_fix

DistributedHoge 49

git-svnでのワークフロー8. いい感じになったのでローカルのマスターリ

ポジトリにまとめてmerge• git checkout master• git merge –squash calendar• git commit

9. svnリポジトリにdcommit• git svn dcommit

10. ノリでbranchを作成• git branch bug_fix• git checkout bug_fix

DistributedHoge 50

git-svnでのワークフロー8. いい感じになったのでローカルのマスターリ

ポジトリにまとめてmerge• git checkout master• git merge –squash calendar• git commit

9. svnリポジトリにdcommit• git svn dcommit

10. ノリでbranchを作成• git branch bug_fix• git checkout bug_fix

DistributedHoge 51

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

DistributedHoge 52

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

DistributedHoge 53

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

DistributedHoge 54

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

DistributedHoge 55

svnリポジトリでもGitの恩恵を受けられる!

DistributedHoge 56

svnリポジトリでの集中管理もできる!

DistributedHoge 57

ワーキングコピー

git-svn

git svn rebase

git svn dcommitsvnリポジトリ

git commit

Gitリポジトリ

ここらへんがgit-svnだと思う

DistributedHoge 58

git-svn introまとめ• 従来のsvnリポジトリ下でもGitの恩恵を受けられるgit-

svnはすごい!– 正直Gitは万人が理解できるものではないらしい(Joelさんが

言ってた)• 自分もまだ・・・

– TortoiseSVNによるデザイナーへの貢献も大きいのでSVNからは離れにくい

– でも便利なのでせめて自分の作業効率だけでも上げる• 今回のgit-svn紹介は導入部分だけなので、各自苦労し

てみてください– ちなみに自分はgit-svn→Gitの順で触った– Gitは今後主流になるかもしれないのに触らないのは損

• githubも楽しいけどcodecheck.inも楽しいよ!

DistributedHoge 59

ちなみに

DistributedHoge 60

Gitを使っていて思ったこと• branch祭りは楽しい

– テーマを決めたりしてガンガン切る– むしろ使い捨てくらいがちょうどいいと思っている

• masterからいちいちmergeするくらいなら新しいbranch

• git checkoutのときに一気にソースコードが変わる様は楽しい

• git-svnというGitとSVNの橋渡しはあるけれども、リポジトリの考え方は180度変えないとGitには慣れない– でも慣れたら楽しい

• Web+DB Vol.50のGit特集は最強

top related