2011-01-08 9 views
41

.gitignoreファイルは、私たちが制御したくないファイルのいくつかを無視するのに非常に便利です。残念ながら、ファイルがすでにバージョン管理下にある場合は使用できません。たとえば、私の.gitignore(既にgitに追加されている)ファイルは、私の同僚が望むものとは異なるかもしれません(例えばVimファイルを無視したい)。このファイルを変更するたびに、gitはそれを変更されたファイルとして表示します。私の質問:Git:バージョン管理されたファイルを無視する

  1. Gitによって既に制御されている特定のファイルの変更を無視する方法はありますか?
  2. これらの変更をコミットする方法はありますか?明らかに、ブランチを使いたくないのは、私が特定のブランチに取り組んでいるからです。
+5

いずれの回答も、受け入れられたものを含め、主要な質問には答えません。問題は、すでに制御されているファイルを無視することであった.gitignoreは除外しないでください。 – shealtiel

+4

git-update-index答えが正解です。 – Jason

答えて

11

プロセスに固有のファイル(Vimテンポラリファイルなど)を除外する場合は、(ローカル)ファイル.git/info/excludeを編集し、そこで除外パターンを追加します。このファイルは、プロジェクト全体の除外用に設計された.gitignoreではなく、開発者固有の除外用に設計されています。

短い要約は、誰でも.gitignoreに追加されているものに同意する必要があります。同意しないファイルについては、.git/info/excludeを使用してください。ここで

+0

バージョン管理されたファイルを.get/info/excludeに追加しましたが、変更されたファイルとして表示され続けました。 – paullb

+7

これは正しくない!!!!下のAristotle Pagaltzisの回答を使用してください。 – paullb

+1

元の質問は、さまざまな同僚が異なるファイルセットを無視する方法を探しています。私の答えは、この目的のために設計された '.git/info/exclude'ファイルを紹介しています。しかし、「Gitにすでに追加されている*すべてのファイルの変更を無視するにはどうすればよいのですか?」という質問を一般化した場合、別の問題があるため別の解決策が必要です。しかし、同僚が「.gitignore」の変更を共有できなくなるので、この特定の問題の一般的な解決策はお勧めしません。 –

2

私は本当に一般的な質問に答えることができません(Gitは追跡ファイルを無視しています)。これは役に立つよりはるかに有害な機能として私を襲います。

ただし、gitignore manual pageでは除外ファイルのパターンを設定する方法がいくつか指定されています。特に

、それはこれらのさまざまな方法を使用する方法についての明確な指示できます:バージョン管理や他のリポジトリに配布し、すべての開発者が必要になるクローン(すなわち、ファイルを経由する必要があります

  • パターンを無視する)は.gitignoreファイルに書き込まれます。意図したとおり、それが働いている - あなたの.gitignoreファイルが同僚と異なってはならないことを意味

。特定のリポジトリに固有のものですが、

  • パターンがに行くべき他の関連するリポジトリ(リポジトリ内に住んしかし、1人のユーザーのワークフローに固有のもの例えば、補助ファイル)と共有する必要はありません。 $GIT_DIR/info/excludeファイルユーザーはGitがすべての状況で無視したい

  • パターンは(例えば、バックアップまたは選択のユーザーのエディタによって生成された一時ファイル)は、一般的に、ユーザーの~/.gitconfigcore.excludesfileで指定されたファイルの中に入ります。

ありがとうございます。 ~/.gitconfigファイルにcore.excludesfileというファイルパスを指定して、除外するパターンを入力します。

git update-index --no-assume-unchanged <files> 

はまた、更新のためのskip-worktreeno-skip-worktreeオプションを見てみましょう:

git update-index --assume-unchanged <files> 

は、その使用を元に戻すには:

99

使用git-update-indexは一時的にすでにバージョン管理下にあるファイルへの変更を無視しますあなたがgit-resetを越えてこれを持続させる必要があるなら-index。

+0

は魅力的に働いた!ありがとうございました! –

1

私は約書いたthree ways of excluding files他の場所。要約すると

  1. グローバルGitはファイルを無視リポジトリに.gitignoreファイルはリポジトリと、そのリポジトリのすべてのクローンを適用
  2. 、そのシステム上のすべてのリポジトリに適用されます。
  3. .git/info/excludeファイルは、そのリポジトリにのみ適用されます。

リスト内の下位項目は、上位項目よりも優先され、ファイル内のいずれかの項目の項目の前にある!は、前回の除外項目と逆になります。

このパラダイムはGitの他の場所で見られます。たとえば、サブモジュールを使用している場合、サブモジュールへのURLはリポジトリの.gitmodulesファイルにありますが、.git/configファイルで使用するURLを上書きすることができます。

+3

既にバージョン管理されているファイルには適用されません –

0

はSmartGitHGのviusalインターフェイスの下でのGitを使用して、それらのための一般化、ユビキタス(ない個別)ソリューションです。

  • あなたは「リポジトリ」ウィンドウで無視したいフォルダを選択します。
  • "ファイル"ウィンドウでそのフォルダのすべてのファイルを選択します(メインウィンドウの右上の領域にあるそれぞれのフィルタアイコンをクリックして変更されていないファイルの表示を非表示にします)。
  • コントロールパネルの[削除]をクリックします(必要に応じて[ローカルファイルを削除]チェックボックスをオンにします)。
  • ローカル変更をコミットします。
  • "リポジトリ"ウィンドウのフォルダを右クリックします。
  • [無視]をクリックします。
4

このコマンドを使用すると、必要な機能を利用できます。

git rm --cached path/to/file 

または

git rm -r --cached path/ignore/dir 

これが唯一の本当のファイルを削除しないであろう、gitのからトラックを削除します。

次に、ignoreファイルを編集して、これらのファイルまたはディレクトリをuntrackすることができます。

関連する問題