.gitignoreを使用せずにGitでファイルを無視するにはどうすればよいですか?


132

外部の奇妙な制約のため.gitignore、リポジトリを変更できません。を変更する以外にファイルやディレクトリを無視する方法はあります.gitignoreか?私のすべてのリポジトリに適用されるグローバル構成のようなグローバルソリューションであっても。

回答:


178

gitignoreによると、Gitが検討するさまざまな「無視パターンソース」には優先順位があることを忘れないでください。

  • パターンは、それらをサポートするコマンドのコマンドラインから読み込まれます。
  • パスと同じディレクトリまたは任意の親ディレクトリにある.gitignoreファイルから読み取られたパターン。上位レベルのファイル(ルートまで)のパターンは、ファイルを含むディレクトリの下位レベルのファイルのパターンによって上書きされます。
  • から読み取ったパターン$GIT_DIR/info/exclude
  • 構成変数で指定されたファイルから読み取られたパターンcore.excludesfile

最後の2つは問題の解決策になる可能性がありますが、

  • それらは遠いリポジトリには複製されません
  • 他のソースによってパターンをオーバーライドすることができます

(このSO質問も参照してください)


他の2つのソリューションには、インデックスの更新が含まれます(git update-index):

ただし、別のブランチをチェックアウトするときgit pull、またはするときに、その「無視」ステータスがリセットされる場合があります。したがって、他のオプション:

両者の違いは「で説明されて- 『の違いのGit assume-unchanged』と『skip-worktree」。


update-index --assume-unchanged@see stackoverflow.com/a/25253144/292408
Elijah Lynn

1
@ElijahLynn確かに。あなたも持っていupdate-index --skip-work-treeます。回答を編集して、これら2つのupdate-indexコマンドを示す私の古い回答へのリンクをいくつか追加しました。
VonC 2014

140

変更できる.git/info/exclude場合は、そこに同じルールを配置できます。ただし、そのファイルはローカルリポジトリ内にのみ存在します。


これはおそらくあなたの最善の策であるようです。ローカルリポジトリからファイルを除外しましょう。
Abizern 2009年

1
これはサブモジュールでどのように機能しますか?.gitサブモジュールにディレクトリはありません...
zakdances 2013年

10
@yourfriendzakサブモジュールの.gitフォルダは実際にはにありますparent_repo/.git/modules/submodule_name。だから編集しますparent_repo/.git/modules/submodule_name/info/exclude
Kara Brightwell

25

無視するファイルをGITに指示する方法は3つあります。

  • .gitignore ファイル
  • $GIT_DIR/.git/info/exclude
  • core.excludesfile設定で参照されるファイル

後者の2つのポイントは問題を解決することができます。

詳細については、gitignore(5)を参照してください。


5

リポジトリにいくつかのローカルファイルを配置したいだけで、サブディレクトリの場所が柔軟な場合は、ファイルを入れて、次のような内容のをtracked_dir1/tracked_dir2/untracked_dir/追加できますtracked_dir1/tracked_dir2/untracked_dir/.gitignore

*

すなわち

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>

4

私も同じような状況にあったので、言及されていない自分の優先ソリューションを追加します。git update-index --assume-unchangedこの場合の問題は、追跡されていないファイルに対しては実行できないことです。あなたが言った

リポジトリの.gitignoreを変更できません。

私はあなたが意味することはあなたが変更.gitignoreを元にプッシュすることができないということだと仮定します。それができる場合は、追跡されていないファイルをローカル.gitignoreに追加git update-index --assume-unchanged .gitignoreし、変更.gitignoreがプッシュされないようにします。これで、(おそらく)追跡されていないファイルは無視され、リモート.gitignoreファイルには影響しません。


3

追跡されたファイルに対するローカルの変更を無視します。 git update-index --assume-unchanged my-file.php

追跡ファイルへのローカル変更を無視しない: git update-index --no-assume-unchanged my-file.php

ソース: git help update-index

--[no-]assume-unchanged
           ...
           This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
           files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
           modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
           changed upstream, you will need to handle the situation manually.


1

別の方法:

  • ローカルを編集 .gitignore
  • その後 git update-index --assume-unchanged .gitignore
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.