Mercurialで特定のファイルのみをコミットしようとしています。変更をコミットしようとするたびにhgが自動追加するため、すべてのファイルをコミットする必要があります。しかし、特定のファイルはまだ「準備ができていない」ので、私はそれを望まない。
有る
hg commit -I thefile.foo
ただし、これは1つのファイルのみです。私にとってより良い方法は、Gitのように自動追加をオフにできる場合です。これは可能ですか?
Mercurialで特定のファイルのみをコミットしようとしています。変更をコミットしようとするたびにhgが自動追加するため、すべてのファイルをコミットする必要があります。しかし、特定のファイルはまだ「準備ができていない」ので、私はそれを望まない。
有る
hg commit -I thefile.foo
ただし、これは1つのファイルのみです。私にとってより良い方法は、Gitのように自動追加をオフにできる場合です。これは可能ですか?
回答:
tonfaが書いているように、コマンドラインでファイルを指定できます。
$ hg commit foo.c foo.h dir/
それはうまくいき、私はいつもそうしています。--include
見つけたフラグを使用することもでき、次のように数回使用できます。
$ hg commit -I foo.c -I "**/*.h"
ファイルセットを使用して、コミットするファイルを選択することもできます。
$ hg commit "set:size(1k - 1MB) and not binary()"
自動追加動作をオフにし、GitのようにMercurialを動作させる設定はありません。ただし、mq拡張機能が重要な場合があります。これは高度な拡張機能ですが、次のことができます
$ hg qnew feature-x # create new patch
$ hg qrefresh -s foo.c # add a file to the current patch
$ hg qrefresh -s bar.c # add another file to the patch
$ hg qfinish -a # convert applied patches to normal changesets
ただし、コマンドラインでファイル名を指定するだけで十分だと思うので、この目的でMQを実際に使用することはありません。
3.8以降では、を使用hg commit --interactive
してファイルを選択することもできます(3.8以前では、同様の機能にcrecord拡張機能を使用できます)。--interactive
(または単に-i
)フラグを使用すると、コミットに含めたいファイルのプロンプトを表示するHG原因となります。追加のボーナスとして、ファイル内のチャンクを含めたり除外したりすることもできます。
インターフェースの例を以下に示します。これは(実際にはcrecordの)古いスクリーンショットであるため、インターフェースが若干変更されています(ただし、基本は同じです)。
このインターフェースを取得するには、cursesインターフェースを有効にする必要があります。hg commit --config ui.interface=curses --interactive
次のコードをに追加するか、一般的に次の行を追加することで、1回の実行でそれを行うことができます.hgrc
。
[ui]
interface = curses
hg ci foo bar baz