特定のファイルのみを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"
fileset を使用して、コミットするファイルを選択することもできます。
$ hg commit "set:size(1k - 1MB) and not binary()"
自動追加動作をオフにして、GitのようにMercurialを動作させる設定はありません。ただし、 mq extension に興味があるかもしれません。これは高度な拡張機能ですが、次のことが可能です
$ 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を実際に使用することはありません。
いくつかのファイルをコミットし、他の多くのファイルを除外する場合は、コミットするファイルを明示的にリストします。 -I
は、ファイルの代わりにパターンを使用する場合にのみ必要です。
多数のファイルをコミットし、少数のファイルのみを除外する場合は、-X
を使用する方が便利です。
例えば。 「file_1」、「file_2」、「file_3」を含むリポジトリを指定すると、次は同等ですが、後者の方が入力が簡単/高速です。
hg commit file_1 file_2
hg commit -X file_3
3.8では、hg commit --interactive
を使用してファイルを選択することもできます(3.8より前では、同様の機能に crecord extension を使用できます)。 --interactive
(または単に-i
)フラグを使用すると、hgはコミットに含めるファイルの入力を求めます。追加のボーナスとして、ファイル内にチャンクを含める/除外することもできます。
インターフェースがどのように見えるかの例を次に示します。これは(実際にはcrecordの)古いスクリーンショットであるため、インターフェースがわずかに変更されています(ただし、基本は同じです)。
そのインターフェイスを取得するには、cursesインターフェイスを有効にする必要があります。 hg commit --config ui.interface=curses --interactive
を使用して、または一般的に次を.hgrc
に追加することで、単一の実行に対してこれを実行できます。
[ui]
interface = curses
このStack Overflowの質問 で提案されているように、これを行う最も簡単な方法は hg shelve
。