web-dev-qa-db-ja.com

Mercurial(hg)特定のファイルのみをコミット

特定のファイルのみをMercurialでコミットしようとしています。変更をコミットしようとするたびにhgが自動追加を行うため、すべてのファイルをコミットする必要があります。しかし、特定のファイルがまだ「準備ができていない」ので、私はそれを望みません。

がある

hg commit -I thefile.foo

ただし、これは1つのファイルのみです。私にとってより良い方法は、Gitのように自動追加をオフにできる場合です。これは可能ですか?

116
user287689

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を実際に使用することはありません。

149
Martin Geisler

いくつかのファイルをコミットし、他の多くのファイルを除外する場合は、コミットするファイルを明示的にリストします。 -Iは、ファイルの代わりにパターンを使用する場合にのみ必要です。

多数のファイルをコミットし、少数のファイルのみを除外する場合は、-Xを使用する方が便利です。

例えば。 「file_1」、「file_2」、「file_3」を含むリポジトリを指定すると、次は同等ですが、後者の方が入力が簡単/高速です。

hg commit file_1 file_2
hg commit -X file_3
22
Rob W

3.8では、hg commit --interactiveを使用してファイルを選択することもできます(3.8より前では、同様の機能に crecord extension を使用できます)。 --interactive(または単に-i)フラグを使用すると、hgはコミットに含めるファイルの入力を求めます。追加のボーナスとして、ファイル内にチャンクを含める/除外することもできます。

インターフェースがどのように見えるかの例を次に示します。これは(実際にはcrecordの)古いスクリーンショットであるため、インターフェースがわずかに変更されています(ただし、基本は同じです)。 crecord screenshot

そのインターフェイスを取得するには、cursesインターフェイスを有効にする必要があります。 hg commit --config ui.interface=curses --interactiveを使用して、または一般的に次を.hgrcに追加することで、単一の実行に対してこれを実行できます。

[ui]
interface = curses
6
studgeek

このStack Overflowの質問 で提案されているように、これを行う最も簡単な方法は hg shelve

0