31202


submoduleを使うと、.gitmodulesにignore=dirtyを指定すると、そのサブモジュールの変更チェックを無視することができますが、submoduleなしで同様の処理を行うことはできないでしょうか？

例えばC++
boostをリポジトリに含めると、ファイル数が多すぎてgitの処理が重くなってしまいます。基本的に変更をすることはないため、リポジトリに入れた後は基本的に無視したいのです。  
cloneした後に各自ダウンロードするという風にしてもいいのですが、できればclone一発で環境が整うようにしたいです。


CC BY-SA 3.0
2016-12-17T00:33:23.010
31194
2016-12-17T09:41:59.540
17238
question
git
git statusで特定のディレクトリ以下のファイルの変更を無視したい


`clone`一発、というわけにはいかないのですが…  
管理対象ファイルに`assume unchanged
bit`を設定すると、そのファイルは変更されていないものとみなして変更検知処理がスキップされます。結果として`git status`の速度が向上します。

[`git-update-index`マニュアル](https://git-scm.com/docs/git-update-index)より:

> When the "assume unchanged" bit is on, the user promises not to change the
> file and allows Git to assume that the working tree file matches what is
> recorded in the index.  
>  [中略]  
>  This is sometimes helpful when working with a big project on a filesystem
> that has very slow lstat(2) system call (e.g. cifs).

設定コマンドは`git update-index --assume-unchanged ファイル名`です。  
留意点としては、設定対象はファイルなので、今回のように特定ディレクトリ以下を、ということであればそれら全てのファイルを指定しなければなりません([参考](https://stackoverflow.com/questions/12288212/git-
update-index-assume-unchanged-on-directory))。

* * *

あるいは、同じく`git-update-index`マニュアル内に記述があるUntracked cache機能も有用かもしれません。  
こちらは変更検知処理をスキップするのではなく簡略化するだけなので、前述の"assume unchanged" bit機能よりは保守的であると思います。  
`git update-index --test-untracked-cache` で本機能が利用可能であるかを確認し、OKならば`git config
core.untrackedCache true`で有効化できます。

この機能については以下で解説されている方がいらっしゃいました。

  * [GitのUntracked cacheという機能 - 灰いじり](http://oshow.hatenablog.com/entry/2016/05/06/004522)

(補足: 排他的な機能ではないので両方有効にすることもできます)


CC BY-SA 3.0
2016-12-17T09:41:59.540
31202
2016-12-17T09:41:59.540
2017-05-23T12:38:55.307
-1
2808
31194
answer