バージョン管理については大まかに以下の2通りになる
- 集中型
- 分散型
| 型式 | 特徴 |
|---|---|
| 集中型 | 作業時には常にサーバに接続が必要となる。 |
| 分散型 | 必要な作業の時だけサーバに接続出来れば良い。 |
長所と短所であるが...
| 型式 | 長所 | 短所 |
|---|---|---|
| 集中型 | 操作は分散型と比較して簡単 | 枯れたソース管理なので今後は主流になる事は無い |
| 分散型 | OSSでも使われる様に現在の主力 | 操作が難しい (集中型と比較して) |
使い方としてはどんな感じ?
使い方としては以下の感じ
集中型
- 修正したいソースをロック (サーバにはロック情報が残る)
- チェックアウト (サーバ → ローカルに最新ソースを取得するイメージ)
- 修正 (ローカル)
- コミット (ローカル → サーバ)
- ロック解除 (サーバのロック情報を解除)
分散型
- チェックアウト (マスターブランチ)
- フェッチ (サーバ → ローカル)
- ブランチを切る (マスターブランチ → 開発ブランチ)
- 修正 (ローカル)
- コミット (ローカル)
- プッシュ (ローカル → サーバ)
- プルリクエスト作成 (開発ブランチ → マスターブランチ) ※GitLabだとマージリクエストとも言いますね)
- コードレビュー (NGであれば4 からやり直し)
- 6.でOKならばマージ (開発ブランチ → マスターブランチ)
※分散型はマージの時にコンフリクトが発生した場合の対応...etc
もあるのだが...今回は説明しない
集中型としてはどんなものがある?
- Microsoft Visual Source Safe ※1 (主にVB5・VB6...etcで使われていたな...)
- SubVersion (主にレガシーなJavaで使われていましたねぇ...)
- Mifrosoft Team Foundation Server ※2 (Microsoft製だが余り使われない?)
※1…略してVSSとも言う。現在ではサポートが終了しているため使用される事は殆ど無い...はず
※2…略してTFSとも言う。
分散型としてはどんなものがある?
- git (恐らく...これ一択じゃね?って感じ)
- Mercurial (こちらもチラホラと話は聞くが...筆者は使った事が無い...)
分散型のGitサーバとしては主に以下の通り...
- GitHub (強い)
- CodeCommit (AWSのサービスの一つ)
- GitLab (無料でサーバ建てられたので一昔は使われていたけど...GitHubの様に課金して使う事も出来る)
- Bitbucket (Sourcetree(Gitクライアントソフト)で有名なアトラシアンが提供している。)
- GitBucket (こちらもGitLabと同様にサーバ建てられる)
gitってどうやって使うの?
- CUIコマンド (コマンドミスったりするので余りオススメしない)
- GUIなクライアントツール (オススメ)
GUIなツールとしてどんなのがあるの?
- Sourcetree (アトラシアン製の有名なGitクライアント)
- GitLens (VsCodeの有名なプラグイン)
- GitKraken (課金する必要ありのGUIなGit)
- IntelliJ IDEA Ultimate (JetBrainsが提供しているエディタに内蔵しているGitクライアント)
この中では筆者はJetBrains All Products Pack課金しているため
Intellij IDEA Ultimate・PyCharm・WebStorm...etc
に内蔵しているGitクライアントを愛用している (←JetBrains社の回し者じゃね?と言われても仕方ない)
何故GUIなGitクライアントがオススメなの?
- 視覚的にどのブランチに居るかも分かる
- 間違った時の訂正についてもCUIよりも容易 (gitの概念を理解していれば...だが...)
- コンフリクトした際の問題についても視覚的に解決出来る (こちらが一番大きなメリット)