====== Mercurial と Git コマンドの比較 ======
===== Mercurial の特徴 =====
[[python:mercurial|Mercurial - 分散型バージョン管理システム]](Linux)\\
[[linux:tortoisehg|TortoiseHg - Mercurial 分散型バージョン管理システム用ツール]](Linux)\\
[[windows:mercurial|TortoiseHg - Mercurial 分散型バージョン管理システム用ツール]](Windows)\\
[[mac:tortoisehg|TortoiseHg - Mercurial 分散型バージョン管理システム用ツール]](Mac)\\
* Python で実装されたクロスプラットフォームの分散型バージョン管理システム
* ライセンスは GPL v2
* コマンドラインのフロントエンドの名称である「hg」という名前でも呼ばれている
* Windows 向けの公式 GUI クライアント「[[windows:mercurial|TortoiseHg]]」も開発されている
* 高度なブランチ機能とマージ機能
* Web インターフェイス
* 他のバージョン管理システムで管理されたソースコードを取り込む機能
* ネットワークが利用できない環境でもバージョン管理を行うことが可能
===== Git の特徴 =====
[[linux:git|Git - 分散型バージョン管理システム]]\\
* 分散型バージョン管理システム
* ライセンスは GPL v2
* Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発された
* 中心リポジトリにアクセスできない環境でも履歴の調査や変更の記録といったほとんどの作業を行うことができる
===== コマンド比較 =====
^ Mercurial ^ Git ^ 説明 ^ 補足 ^
| hg clone | git clone | リポジトリをクローン | |
| hg add | git add | ファイルを登録 | Mercurial は新規登録されるファイル以外は add 不要\\ Git はコミットのたびに変更ファイルの add が必要 |
| hg add | git add . | すべてのファイルを登録 | |
| hg addremove | - | 次回コミットを実行する際に追加または削除されるファイルを登録 | 未登録のファイル(?)は hg add、削除されたファイル(!)は hg remove する |
| hg remove | git rm | ファイルを削除 |
| hg rename/move | git mv | ファイル名を変更\\ copy + remove と同じ |
| hg diff | git diff(add前)\\ git diff –cached(add後) | 差分確認 | |
| hg revert | git checkout --forcegit checkout .git checkout -- *git reset --hard origin/master | ファイルやディレクトリを以前の状態に復旧 | |
| hg status | git status | ローカルのリポジトリで更新があったファイルの一覧を表示 | |
| hg update [-C] | git merge origin/master | 作業ディレクトリをリポジトリの最新内容に更新 | |
| hg tags | git tag | タグの一覧を表示 | |
| hg branch | git checkout -b | ブランチの作成 | |
| hg update | git checkout | ブランチの切替 | |
| hg commit --close-branch | git branch --delete | ブランチの削除/閉鎖 | Mercurial は閉鎖という概念\\ Git はブランチの削除 |
| hg update
hg commit | git reflog
git branch HEAD@<番号> | 削除/閉鎖 されたブランチの復旧 | Mercurial は非アクティブの branch を復活させる\\ Git はブランチをもどすイメージ |
| hg branches | git branch | ローカルブランチを表示 | |
| - | git branch -a | リモートブランチを表示 | Mercurial は取り込みが必要 |
| hg pull -update | git branch /origin/ | リモートブランチをローカルへ取り込む | Mercurial は全てのブランチをローカルに展開\\ Git は特定のブランチのみをローカルに展開 |
| hg pull –update | git pullgit fetch
git merge /origin/ | 変更差分の取り込み | Mercurial はブランチのローカル取り込みと作業ディレクトリのリポジトリ最新内容に更新を同時に行う |
| | git pull --tags | リモートのタグを取得 | |
| hg merge | git stash save -u
git merge origin/
git stash pop | ローカルリビジョンと指定リビジョンのマージ | Mercurial はコンフリクトしたら手動修正\\ Git は git stash list で stash した list の確認、コンフリクトしたら手動修正 |
| hg merge | git merge origin/ | ブランチ間のマージ | |
| hg commit | git commit -a | ローカルリポジトリにコミット | |
| hg push | git push | コミットした変更をリポジトリサーバに反映 | |
| | git push --tags | ローカルのタグをリモートに push | |
| hg annotate/blame | git blame | チェンジセットを行ごとに表示 | |
| hg cat hg cat -r -o | git cat-file -p : | ファイルを出力 | |
| hg log | git log | 全てのリポジトリまたはファイルの変更履歴を表示 | |
| hg help | git help | ヘルプを表示 | |
| hg convert | - | 別 SCM のリポジトリから Mercurial リポジトリへの変換 | Mercurial は convert プラグインを有効化する必要がある |
| | git clone --recursive | submodule をクローン | |
| | git clone
cd
git submodule update --init --recursive | submodule をクローンし忘れた場合 | |
===== 参考文献 =====
[[https://stackoverflow.com/questions/35837/what-is-the-difference-between-mercurial-and-git|version control - What is the Difference Between Mercurial and Git? - Stack Overflow]]\\