add a tip about using git's assume-unchanged feature to optimize large trees
This commit is contained in:
parent
edcd3123d5
commit
5a82c0dee7
1 changed files with 31 additions and 0 deletions
31
doc/tips/assume-unstaged.mdwn
Normal file
31
doc/tips/assume-unstaged.mdwn
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
[[!meta title="using assume-unstages to speed up git with large trees of annexed files"]]
|
||||||
|
|
||||||
|
Git update-index's assume-unstaged feature can be used to speed
|
||||||
|
up `git status` and stuff by not statting the whole tree looking for changed
|
||||||
|
files.
|
||||||
|
|
||||||
|
This feature works quite well with git-annex. Especially because git
|
||||||
|
annex's files are immutable, so arn't going to change out from under it,
|
||||||
|
this is a nice fit. If you have a very large tree and `git status` is
|
||||||
|
annoyingly slow, you can turn it on:
|
||||||
|
|
||||||
|
git config core.ignoreStat true
|
||||||
|
|
||||||
|
When git mv and git rm are used, those changes *do* get noticed, even
|
||||||
|
on assume-unchanged files. When new files are added, eg by `git annex add`,
|
||||||
|
they are also noticed.
|
||||||
|
|
||||||
|
There are two gotchas. Both occur because `git add` does not stage
|
||||||
|
assume-unchanged files.
|
||||||
|
|
||||||
|
1. When an annexed file is moved to a different directory, it updates
|
||||||
|
the symlink, and runs `git add` on it. So the file will move,
|
||||||
|
but the changed symlink will not be noticed by git and it will commit a
|
||||||
|
dangling symlink.
|
||||||
|
2. When using `git annex migrate`, it changes the symlink and `git adds`
|
||||||
|
it. Again this won't be committed.
|
||||||
|
|
||||||
|
These can be worked around by running `git update-index --really-refresh`
|
||||||
|
after performing such operations. I hope that `git add` will be changed
|
||||||
|
to stage changes to assume-unchanged files, which would remove this
|
||||||
|
only complication. --[[Joey]]
|
Loading…
Reference in a new issue