web-dev-qa-db-ja.com

Mercurialの無視ファイル

構成ファイルを無視するようMercurialを取得しようとしていますが、機能させることができません。

hg initを使用してサーバー上にリポジトリを作成し、そのリポジトリをコンピューターに複製しました。それからconfigurationjファイルを編集できるようにしたいが、それらの変更をサーバーにコミットしたくない。

クローンのルートに.hgignoreを作成しようとしましたが、Mercurialは?でファイルにフラグを立て、コミットするかどうかにかかわらず、構成の変更を記録し続けます。

.hgignoreファイルを間違った場所に作成していますか?このファイルをコミットする必要がありますか?サーバー上のリポジトリを初期化する前に作成する必要がありますか?

65
Tom
  • .hgignoreは、initの前に作成する必要はありません
  • 構成ファイルが他の人によって使用される場合、.hgignoreをコミットして他の人が作成する必要がないようにしますただし、Mercurialがローカルファイルを無視する必要はありません
  • はい。hgignoreはルートディレクトリにある必要があります

簡単な例。

リポジトリを初期化します。

$ mkdir test 
$ cd test 
$ hg init 

ファイルを作成する

$ touch foo 
$ hg st 
? foo 

リポジトリのルートディレクトリに.hgignoreを作成します。

$ echo 'foo' > .hgignore 

fooは無視されるようになりました。

$ hg st 
? .hgignore 

これが機能するために.hgignoreをコミットする必要がないことに注意してください。

もう少し難しい

構成ファイルと.hgignore(構成ファイルを無視する)の両方がレポジトリでコミットされる場合、はい、構成ファイルの変更は追跡されます(つまり、.hgignoreは効果がありません)

構成を作成してコミットする

$ touch config
$ hg ci config -Am 'adding conf'

それを無視します:

$ echo 'config' >> .hgignore

.hgignoreのコミット:

$ hg ci .hgignore -Am '.hgignore'

次に、レポジトリのクローンを作成する場合:

$ cd ..
$ hg clone test other-user
$ cd other-user

構成を変更します。

$ echo 'new config param' >> config

hgは変更を表示します:

$ hg st
M config

これに対処する方法は?

おそらく、リポジトリにglobal.cfgというバージョン管理されたメインのデフォルト構成ファイルが必要になります。

そして、ユーザーにlocal.cfgを作成して、ローカル設定を配置するように依頼します。また、スクリプトはlocal.cfgが存在する場合にソースします。ローカル設定がグローバル設定をオーバーライドします。もちろん、.hgignoreに行を追加して、local.cfgを無視します;)

代替:グローバル設定ファイルはありません。ユーザーがローカルでコピーおよび変更するconfig.exampleのみです。ここでの欠点は、バージョン間の変更を簡単に追跡できないことです。

69
Nicolas Dumazet

ファイルを無視した場合でも、Mercurialはそれらがリポジトリに追加されるとそれらを追跡します。

リポジトリから設定ファイルを削除するには、次を使用できます。

hg remove -Af file.cfg

これにより、ローカルファイルを削除せずに、リポジトリからファイルが削除されます(コミットされた後)。見る hg help removeただし、現在レポジトリに削除が記録されており、Mercurialは、そのリビジョン全体であなたまたは他の誰かが更新するとそのファイルを削除します

名前を変更して、マスターをローカルファイルにコピーさせることもできますが、ローカルファイルの更新を調整する必要があります。

hg rename file.cfg file.cfg.example
29
Justin Love

.hgignoreファイル自体を.hgignoreファイルに追加します。

syntax: glob

.hgignore

または、ローカルクローンに.hgignoreファイルをチェックインするだけです...

15
John Weldon