web-dev-qa-db-ja.com

ローカルでいくつかのファイルを無視するようにgitを設定するにはどうすればいいですか?

他の人のためにグローバルなgit設定を汚染することなくローカルでファイルを無視できますか?私のgitステータスでスパムである未追跡ファイルを持っていますが、私のローカルブランチにある小さなランダムな未追跡ファイルごとにgit configの変更をコミットしたくありません。

1110
Bjorn Tipling

関連するGitドキュメント から:

特定のリポジトリに固有であるが、他の関連リポジトリと共有する必要のないパターン(たとえば、リポジトリ内に存在するが、1人のユーザーのワークフローに固有の補助ファイル)は、$GIT_DIR/info/excludeファイルに入れる必要があります。

.git/info/excludeファイルの形式は、.gitignoreファイルと同じです。別のオプションは、core.excludesFileをグローバルパターンを含むファイルの名前に設定することです。

ステージングされていない変更が既にある場合は、ignore-patternsを編集した後に次を実行する必要があります。

git update-index --assume-unchanged [<file>...]

$GIT_DIRに関する注意:これは、 全体 gitリポジトリへのパスを示すためのgitマニュアルの表記です。環境変数が設定されている場合は、現在のリポジトリの場所が上書きされますが、これはおそらく望んでいないものです。

1620
Josh Lee

更新 :代わりにgit update-index --skip-worktree [<file>...]の使用を検討してください。ありがとう@danShumway! 2つのオプションの違いについての Borealidの説明を参照してください


古い答え:

あなたが追跡しているファイルへのローカルの変更を無視する必要があるなら(私たちは設定ファイルへのローカルの修正でそれを持っています)、git update-index --assume-unchanged [<file>...]を使います。

399
Florian Sesser

.gitconfigファイルの[alias]セクションに次の行を追加します。

ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"

これで、git ignore my_fileを使用してローカルファイルへの変更を無視し、git unignore my_fileを使用して変更を無視しないようにすることができます。 git ignoredは無視されたファイルをリストします。

この答えは http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html から集められました。

142
phatmann

いくつかの選択肢があります。

  • 汚れた(またはコミットされていない).gitignoreファイルを作業ディレクトリに残します(または topgit またはその他のそのようなパッチツールを使用して自動的に適用します)。
  • これが1つのツリーに固有のものである場合は、excludeを$GIT_DIR/info/excludeファイルに入れます。
  • git config --global core.excludesfile ~/.gitignoreを実行して、~/.gitignoreにパターンを追加してください。このオプションは、 all ツリーにまたがる特定のパターンを無視したい場合に適用されます。私はこれを例えば.pyc.pyoファイルに使います。

また、該当する場合は、パターンを使用していて、ファイルを明示的に列挙していないことを確認してください。

101
Emil Sit

私はあなたが探していると思います:

git update-index --skip-worktree FILENAME

ローカルに加えられた変更を無視します

これが http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ /これらの解決策についての詳細な説明です!

47
Piotr Korlaga

このプロセスを簡単にするために、 gitエイリアス をインストールすることができます。これはあなたの[alias]ファイルの.gitconfigノードを編集します。

git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep "^S"'

これによりインストールされるショートカットは次のとおりです。

  • git ignore config.xml
    • gitはconfig.xmlの変更を見ないとふりをします - 誤ってそれらの変更をコミットするのを防ぎます。
  • git unignore config.xml
    • gitはconfig.xmlへのあなたの変更の承認を再開します - あなたがそれらの変更を再びコミットすることを可能にします。
  • git ignored
    • gitはあなたが "無視している"全てのファイルを上記の方法でリストします。

私は phatmannの答え - を参照してこれらを作成しました。これは同じバージョンの--assume-unchangedバージョンを表しています。

私が提示するバージョンは、ローカルの変更を無視するために--skip-worktreeを使います。違いについての完全な説明は Borealidの答え を参照してください、しかし本質的に--skip-worktreeの目的は開発者が変更をコミットする危険なしにファイルを変更するためです。

ここに示されているgit ignoredコマンドはgit ls-files -vを使用して、リストをフィルター処理してSタグで始まるエントリーだけを表示します。 Sタグは、ステータスが "skip worktree"であるファイルを示します。 git ls-filesで示されるファイルステータスの完全なリストについては、 -tgit ls-filesオプションに関するドキュメントを参照してください。

42
Birchlabs

ホームディレクトリに.gitignoreファイル、つまり$HOME/.gitignoreまたは~/.gitignoreを追加するだけです。それからgitにそのファイルを使うように指示します。

git config --global core.excludesfile ~/.gitignore

これは無視するものを決めるときにgitが参照する通常の.gitignoreファイルです。ホームディレクトリにあるので、それはあなただけに適用され、プロジェクトの.gitignoreファイルを汚染することはありません。

私は何年もこの方法を使って素晴らしい結果を得てきました。

29
JESii

レポジトリに.gitignoreファイルがまだない場合は、.gitignoreファイルを作成し、無視するファイルのリストに.gitignoreを追加するという簡単な解決策があります。

0
g.rocket