Hi,
For large repositories, many simple git commands like `git status`
take a while to respond. I understand that this is because of large
number of stat() calls to figure out which files were changed. I
overheard that Mercurial wants to solve this problem using itnotify,
but the idea bothers me because it's not portable. Will Git ever
consider using inotify on Linux? What is the downside?
Ram
On Fri, Feb 8, 2013 at 10:10 PM, Ramkumar Ramachandra
[off-list ref] wrote:
For large repositories, many simple git commands like `git status`
take a while to respond. I understand that this is because of large
number of stat() calls to figure out which files were changed. I
overheard that Mercurial wants to solve this problem using itnotify,
but the idea bothers me because it's not portable. Will Git ever
consider using inotify on Linux? What is the downside?
There's one relatively easy sub-task of this that I haven't seen
mentioned: Improving the speed of interactive rebase on large (as in
lots of checked out files) repositories.
That's the single biggest thing that bothers me when I use Git with
large repos, not the speed of "git status". When you "git rebase -i
HEAD~100" re-arrange some patches and save the TODO list it takes say
0.5-1s for each patch to be applied, but at least 10x less than that
on a small repository. E.g. try this on linux-2.6.git v.s. some small
project with a few dozen files.
I looked into this a long while ago and remembered that rebase was
doing something like a git status for every commit that it made to
check the dirtyness.
This could be vastly improved by having an unsafe option to git-rebase
where it just assumes that the starting state + whatever it wrote out
is the current state, i.e. it would break if someone stuck up on your
checkout during an interactive rebase and changed a file, but the
common case of the user having exclusive access to the repo and
waiting for the rebase would be much faster.
Ævar Arnfjörð Bjarmason wrote:
On Fri, Feb 8, 2013 at 10:10 PM, Ramkumar Ramachandra
[off-list ref] wrote:
quoted
For large repositories, many simple git commands like `git status`
take a while to respond. I understand that this is because of large
number of stat() calls to figure out which files were changed. I
overheard that Mercurial wants to solve this problem using itnotify,
but the idea bothers me because it's not portable. Will Git ever
consider using inotify on Linux? What is the downside?
There's one relatively easy sub-task of this that I haven't seen
mentioned: Improving the speed of interactive rebase on large (as in
lots of checked out files) repositories.
That's the single biggest thing that bothers me when I use Git with
large repos, not the speed of "git status". When you "git rebase -i
HEAD~100" re-arrange some patches and save the TODO list it takes say
0.5-1s for each patch to be applied, but at least 10x less than that
on a small repository. E.g. try this on linux-2.6.git v.s. some small
project with a few dozen files.
I looked into this a long while ago and remembered that rebase was
doing something like a git status for every commit that it made to
check the dirtyness.
What is it really doing? I think the main culprit is
require_clean_work_tree() from git-sh-setup.sh, and that is only run
in the `--continue` and `exec` codepaths.