水銀の利点

ほとんどすべての読者は、Mercurialが何であるかを知っていると思います。これは、ソースコードやその他の(ほとんどがテキスト)ファイルの分散バージョン管理システムです。 多くの人々がそれを使用しており、ファイルの削除/追加、コミットの作成、他のリポジトリへのローカル変更の送信などの基本的なコマンドを知っています。 ただし、Mercurialにはあまり知られていない多くの機能やコマンドがあり、それらは非常に便利で便利です。 それらの一部はデフォルトでインストール後すぐに使用できます。一部は設定で有効にする必要があり、他の場合は追加の拡張機能をダウンロードする必要があります。



この記事で説明する内容の短いリスト:







ロゴマーク





hg serve(hgweb)





Mercurialの標準配信には、任意のブラウザで便利なインターフェイスを使用してリポジトリをすばやく表示できるWebサーバーが含まれています。これには、リポジトリのあるフォルダでhg serve



を実行し、 localhost:8000



(標準ポートは8000)に移動します。 そのため、通常のコマンドラインインターフェイスを介して利用可能なほぼすべての情報を表示できます。 同時に、ネットワーク上の別のコンピューターから、実行中のhgwebのアドレスでhg clone



を使用してhg clone



hg clone



できます。



もちろん、Webサーバーをこれだけに使用できるのであれば、奇妙なことでしょう。これはそうではありません。 Hgwebは、たとえば1つのフォルダーから複数のリポジトリーを一度に処理し、nginxまたは別のサーバーをその前に配置するように構成できます(十分な通信オプションがあります-ポートを介した通常のhttp、またはwcgiなど)。 構成の詳細については、特に公式のMercurial wikiで説明されています。 hgwebに欠けていることがある重要な機能-ユーザー認証と読み取り/書き込み許可-は、追加のフロントエンドサーバーをインストールして構成することでも実装できます。 たとえば、nginxの通常のhttp認証を使用して、プライベートリポジトリへの不正アクセスやパブリックリポジトリへのプッシュを禁止しています。



外観に関しては、キットにはいくつかのテーマがあり、デフォルトは紙です。



例: selenic.com/hg-公式リポジトリ、 hg.python.org -Pythonリポジトリ、 hg.aplavin.ru-私の(ほとんど)リポジトリ。



拡張機能ページャー、進行状況、色





これらの拡張機能はMercurialのインストールに含まれており、使用するには設定に含めるだけで十分です。 これを行うには、拡張セクションを~/.hgrc



ファイルに追加します。



 [extensions] pager = progress = color =
      
      







(はい、等号の後には何もありません)。 これらの拡張機能により、CLIインターフェースでの作業が多少便利になります。多くのコマンドの出力が色付きになり、長時間の操作中に進行状況バーが表示され、 hg log



などのコマンドの長いシートをスクロールできます-それらは標準のページャーで開きます(通常、これはless



)。 残念ながら、ヘルプページ( hg help



)は以前のように開きます。表示を便利にするために、手動で追加する必要があります| less



| less



。 Mercurialの著者が言うように、これらの拡張機能は、特にWindowsで予期しない問題が発生することがあるため、デフォルトでは有効になっていません。



hg [c]レコード





多くの場合、ソースコードを長時間編集した後、1つの大きなものを作成するよりも、変更をいくつかのコミットに分割する方が便利です。 標準のMercurialパッケージには、このためのrecord



拡張があり、使用する設定に含めるのは非常に簡単です。 その後、変更を選択するには、 hg record



を実行し、テキストインターフェイスで必要な部分を選択する必要があります。



ただし、この拡張機能はあまり便利ではなく、不定期の編集にのみ適しています。 この機能をより頻繁に使用する場合は、標準キットcrecordからではなく、別の拡張機能をダウンロードして接続することをお勧めします。 これは、使用に非常に便利な疑似グラフィックインターフェイスを提供します(作成者の例: 画像 ) もちろん、これには完全にグラフィカルなユーティリティがあります(たとえば、Qtで書かれたqctが好きでした)が、コンソールのその場で簡単に編集するには、crecordが非常に便利です。



改訂





Mercurialは、コミットの任意の複雑な検索条件に使用できるクエリ言語を使用し、コミットで動作するすべてのコマンドでサポートされます(近日中にhgwebでサポートされる予定です)。 たとえば、ほぼ「古典的な」例-バグが修正されたコミットがいくつかあり、このバグ修正が入ったリリースを見つける必要があります。 リリースを指定するためにタグが使用されると仮定すると(私が見たすべてのプロジェクト)、そのようなクエリは'tag() and descendants(x)'



または'tag() and x::'



x



は識別子です)コミット)。 つまり、 hg log 'tag() and x::'



を実行するhg log 'tag() and x::'



、必要なすべてのリリースが表示されます。 構文および利用可能なすべての機能に関する詳細情報は、 hg help revsets



または公式Webサイトで入手できます。



ファイルセット





ファイルセットもrevsetsに似たクエリ言語ですが、ファイルを指定するためのものです(ファイルを操作する対応するコマンド用)。 ほぼ同じ方法で使用されますが、最初にset:



を追加する必要があるのは、通常のファイル名と混同しないようにするためです。 サポートされている機能に関しては、それらは標準ヘルプにもあります: hg help filesets







チェンジセットの進化





evolve拡張機能は実験的な拡張機能であり、現在(ほとんど)Mercurialチームのメンバーの1人によって開発されています。 場合によってはUIとパフォーマンスでまだ最終的に解決されていない問題、および安定性の欠如のためではなく実験的です(一般的に、その機能に関連するコードの一部はMercurial自体にありますが、デフォルトでは機能しません) 。 特に、この拡張機能は公式のMercurialリポジトリ自体で使用されます。



Changeset Evolutionは、接続されると、新しいコマンドを追加するだけでなく、標準コマンド(および他の拡張機能)の動作を変更します。何らかのcommit --amend, rebase, histedit



履歴を編集commit --amend, rebase, histedit



commit --amend, rebase, histedit



など。 evolveを使用する場合evolve



コミットはリポジトリから完全に削除されません(完全に削除することを目的とするstrip



コマンドを除きますが、これは引き続き便利です)。 履歴を編集すると、不要なコミットは削除済み(より正確には廃止- obsolete



)としてマークされ、新しいコミットはそれらを置き換えるものとしてマークされます。 したがって、以前に存在していた変更のバージョンをいつでも見つけることができます。



また、追加の「バン」から-すでに公開リポジトリに送信された変更を編集する機能。 さらに、ローカルコピーを持っている人は、新しい変更をアップロードするときに、削除された(廃止された)コミットとローカルリポジトリに関する情報も受け取ります(もちろん、この拡張機能も有効になっている場合)。 これはevolve



なしでは得られません。



おわりに





一般に、Mercurialには他の「高度な」機能がありますが、この記事では、多くのユーザーにとって有用であり、無知のために頻繁に使用しない機能について説明しようとしました。 また、Mercurialには非常に厳格な後方互換性ポリシーがあります。変更はすべて既存の機能に影響を与えず、新しい機能を追加します。 サーバー上の非常に古いバージョンは新しいクライアントで機能し、その逆も同様です(もちろん、古いバージョンでサポートされていない機能は機能しません)。 このような深刻な後方互換性は、ユーザーに表示されるすべてのコマンドと機能に適用されます。つまり、内部APIは変更される可能性があります(ただし、正当な理由でこれを行いません)。



私自身は基本レベルで数年にわたってMercurialを使用してきましたが hgweb



hgweb



改善hgweb



でGoogle Summer of Codeに参加しています。 途中で、開発者とコミュニケーションをとりながら、この記事で説明した機能を特に学び、使用し始めました。



All Articles