SVNとgitの違いは? †
- SVNのリポジトリを2つ持つのに近い
- 1つはローカルHDDに造った自分専用のリポジトリ1
- サーバーにもう1つのリポジトリ2をつくる
- ローカルのSVNリポジトリ1は自分のみ使う(コミット)
- ローカルで満足のいったリビジョンをSVNでエクスポート
- リポジトリ2を最新の状態に更新する(プル)
- エクスポートしたファイルをリポジトリ2にコミットする(プッシュ)
- リポジトリ2の競合を解決する
- リポジトリ1に競合を解決したプロジェクト2を更新する
メリット / デメリット †
- これらの2つのSVNリポジトリの運用に不便を感じるならgitに移行すると便利
- ローカルでのバージョン管理だけならSVNで充分
- 公開予定のあるものはbitBucketとかgitHubを使ったサーバーへの同期がリアルタイムに更新できる
- 競合した時にめんどくさい、ただこれはSVNも同様
- 使いこなせてないせいか、まだうまく差分を吸収できない
コミットしてプッシュする †
#ref(): File not found: "gitImage1.png" at page "git"
- ローカルでとりあえず保存しておきたいリビジョンは好きなタイミングでコミットしていい
- SVNではコミットしてしまうとプロジェクトに正式に提出してしまうことになる
- そのためローカルで大きな変更をともなうテスト中のコミットは危険である
- あとで元に戻したいのでとりあえず保存しておきたい場合のコミットもプロジェクトに影響がでる
- なので、gitで便利なのはローカルのコミットとサーバーへのコミット(プッシュ)の2段階が存在していること
- SVNでローカルのリポジトリとプロジェクトで共用しているリポジトリを2種類運用するのに似ている
- うまくプロジェクトに参加させたいリビジョンができたらサーバーにコミット(プッシュ)する
- でもその前に、サーバーから最新のソースを持ってきておく必要があるよね(プル)
プルしてコミットする †
#ref(): File not found: "gitImage2.png" at page "git"
- サーバーの最新状態をプルして持ってくる
- そのあとで自分のソースをコミット、この辺りはSVNと一緒
- サーバーの最新状態をすべて持ってきて上書きするのを「クローン」
- ローカルの状態がおかしくなったりしたらとりあえずクローンして最新にしちゃう
簡単な手順 †
ローカルリポジトリの設定 †
- 登録したいソースコード一式を用意する
- 適当な場所に(ローカルの)リポジトリを作成する
- SourceTreeで「リポジトリの作成」を行いリポジトリの場所を設定する
- そのリポジトリに「ソースコード一式」を放り込む
- コミットする
- これでローカルのリポジトリによるファイル管理は完成
リモートを設定する †
- BitBucketにブラウザでログインする
- 新規リポジトリを作成する
- SourceTreeでリモートの設定を行う
- さっき作ったリモートリポジトリのURLを設定する
- https://ユーザー名@bitbucket.org/ユーザー名/リポジトリ名.git
- プッシュする
- これでPCが壊れても安心!
git使ってみてどうなのか †
- まだ慣れていないせいかSVNに戻りたいTT
- SVNクライアントであるTortoiseSVNがわかりやすすぎた
- エクスプローラー連動であること
- シンプルであること
- その前のCVSが面倒だったこと
- VSSのロックによる仕組みの弱点をカバーできていたこと
- TortoiseGitは評判が良くないのでまだ試していない
- gitクライアントのSourceTreeを使っているが、日本語環境が良くない
- Windows環境ではコミット時にメッセージが日本語で書けない
- mac用では日本語環境に特に問題ないが、SourceTreeがTortoiseSVNほど直感的でないのでまだ慣れない
- サーバー側にリポジトリを作る手間が圧倒的にラク
- お客さんや遠隔地のヒトとリポジトリを簡単に共有できる
- SVNの場合はセキュアなしくみを自前で構築する必要がある
- BitBucketなどのAtlasianのサービスを使うことで容量の制限はあるもののとりあえずリポジトリの共有に問題がない
GITの留意点、覚書など †
git留意点
userファイルが追加されない †
vcのプロジェクトの設定ファイルの1つ「*.user」がどうしてもsourceTreeで追加の対象にならならない
http://tech.nitoyon.com/ja/blog/2013/04/05/sourcetree/によると、グローバルな無視リストに含まれてしまっているとのこと。ホントだ「*.user」が入ってる。他にもこれらが入ってるので注意。
*.obj
*.exe
*.pdb
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.user
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
*.dll
*.lib
*.sbr