Linux hg コマンド
hg は Mercurial 分散バージョン管理システムのコマンドラインツールです。Mercurial は軽量な分散バージョン管理システムで、Python で書かれており、Git に似ていますが設計はよりシンプルです。
hg 基本概念
バージョン管理システム
バージョン管理システム(VCS)は、ファイルの変更履歴を追跡し、複数人での共同開発をサポートします。集中型(SVNなど)と分散型(Git、Mercurialなど)に分けられます。
分散型VS集中型
- 分散型:各開発者は完全なリポジトリのコピーと履歴を持っています
- 集中型:中央リポジトリがすべての履歴を保存します
Mercurialの特徴
- シンプルで直感的なコマンド設計
- 大規模プロジェクトを高パフォーマンスで処理
- クロスプラットフォーム対応
- 拡張可能なプラグインシステム
hg のインストールと設定
インストール方法
例
# Ubuntu/Debian
sudo apt-get install mercurial
# CentOS/RHEL
sudo yum install mercurial
# macOS (Homebrewを使用)
brew install mercurial
sudo apt-get install mercurial
# CentOS/RHEL
sudo yum install mercurial
# macOS (Homebrewを使用)
brew install mercurial
基本設定
編集~/.hgrcファイル:
例
[ui]
username = Your Name
username = Your Name
hg よく使うコマンドの詳細
リポジトリ操作
例
# 新規リポジトリの初期化
hg init プロジェクト名
# 既存リポジトリのクローン
hg clone https://example.com/repo
hg init プロジェクト名
# 既存リポジトリのクローン
hg clone https://example.com/repo
ファイル追跡
例
# ファイルをバージョン管理に追加
hg add ファイル名
# リポジトリの状態を確認
hg status
# 変更をコミット
hg commit -m "コミットメッセージ"
hg add ファイル名
# リポジトリの状態を確認
hg status
# 変更をコミット
hg commit -m "コミットメッセージ"
ブランチ管理
例
# 新しいブランチを作成
hg branch ブランチ名
# ブランチを切り替え
hg update ブランチ名
# すべてのブランチを表示
hg branches
hg branch ブランチ名
# ブランチを切り替え
hg update ブランチ名
# すべてのブランチを表示
hg branches
変更履歴
例
# コミット履歴を表示
hg log
# 特定ファイルの変更履歴を表示
hg log ファイル名
# 変更内容を表示
hg diff
hg log
# 特定ファイルの変更履歴を表示
hg log ファイル名
# 変更内容を表示
hg diff
リモート操作
例
# リモートの変更を取得
hg pull
# ローカルの変更をプッシュ
hg push
# リモートリポジトリを表示
hg paths
hg pull
# ローカルの変更をプッシュ
hg push
# リモートリポジトリを表示
hg paths
hg 上級者向け使い方
変更の取り消し
例
# 作業ディレクトリの変更を取り消し
hg revert ファイル名
# 特定のバージョンに戻す
hg update -rリビジョン番号
hg revert ファイル名
# 特定のバージョンに戻す
hg update -rリビジョン番号
ブランチのマージ
例
# 別のブランチを現在のブランチにマージ
hg merge ブランチ名
# 競合を解決後、解決済みとしてマーク
hg resolve -mファイル名
hg merge ブランチ名
# 競合を解決後、解決済みとしてマーク
hg resolve -mファイル名
タグ付け
例
# タグを作成
hg tag タグ名
# すべてのタグを表示
hg tags
hg tag タグ名
# すべてのタグを表示
hg tags
hg と Git の比較
| 特徴 | hg (Mercurial) | Git |
|---|---|---|
| 学習曲線 | 比較的緩やか | 比較的急 |
| コマンド設計 | より一貫性がある | より柔軟 |
| ブランチモデル | 名前付きブランチ | 軽量ブランチ |
| Windowsサポート | ネイティブサポートが良い | Git Bashが必要 |
| プラグインシステム | 強力 | 強力 |
実践的な使用例
例1: 新規プロジェクトの作成
例
# 1. プロジェクトディレクトリを作成
mkdir myproject
cd myproject
# 2. リポジトリを初期化
hg init
# 3. ファイルを作成して追加
echo "Hello World" > README.txt
hg add README.txt
# 4. 初期バージョンをコミット
hg commit -m "Initial commit"
mkdir myproject
cd myproject
# 2. リポジトリを初期化
hg init
# 3. ファイルを作成して追加
echo "Hello World" > README.txt
hg add README.txt
# 4. 初期バージョンをコミット
hg commit -m "Initial commit"
例2: チーム共同作業の流れ
例
# 1. リモートリポジトリをクローン
hg clone https://team-server.com/project
# 2. フィーチャーブランチを作成
hg branch feature-x
hg commit -m "Start feature X"
# 3. 開発完了後、サーバーにプッシュ
hg push --new-branch
# 4. 他のメンバーが更新を取得
hg pull
hg update feature-x
hg clone https://team-server.com/project
# 2. フィーチャーブランチを作成
hg branch feature-x
hg commit -m "Start feature X"
# 3. 開発完了後、サーバーにプッシュ
hg push --new-branch
# 4. 他のメンバーが更新を取得
hg pull
hg update feature-x
よくある問題の解決
問題1: 誤った内容をコミットした
例
# 最後のコミットに戻す
hg rollback
# または逆の変更を作成
hg backout 誤ったコミットID
hg rollback
# または逆の変更を作成
hg backout 誤ったコミットID
問題2: マージ競合
- 競合ファイルにはマーカーが含まれます
- ファイルを編集して競合を解決
- 解決済みとしてマーク
- マージコミットを完了
例
hg resolve -m競合ファイル
hg commit -m "Merge conflict resolved"
hg commit -m "Merge conflict resolved"
問題3: 削除したファイルを取り戻す
例
# 削除履歴を表示
hg log --removed
# 特定バージョンのファイルを復元
hg revert -rリビジョン番号 ファイル名
hg log --removed
# 特定バージョンのファイルを復元
hg revert -rリビジョン番号 ファイル名
ベストプラクティスの推奨
- 頻繁にコミット:小さな単位でコミットし、各コミットの原子性を保つ
- 説明的なメッセージ:コミットメッセージは変更内容を明確に説明する
- ブランチ戦略:長期ブランチ(開発、リリースなど)と短期フィーチャーブランチで異なる戦略を使用する
- 定期的な同期:定期的に pull/push を実行してチームと同期を保つ
- 重要なブランチのバックアップ:重要なブランチはリモートサーバーにプッシュする
学習リソースのおすすめ
- 公式ドキュメント:https://www.mercurial-scm.org/guide
- 『Mercurial: The Definitive Guide』電子書籍
- hg 組み込みヘルプ:
hg help或hg help 命令名 - 対話型チュートリアル:https://hginit.com/
hg コマンドを習得することで、プロジェクトのバージョンを効率的に管理し、チームで共同開発できます。現在は Git の方が人気ですが、Mercurial のシンプルな設計により、特定のシナリオでは今でも優れた選択肢です。
その他の拡張