msysgit / git

msysGit-based Git for Windows 1.x is now superseded by Git for Windows 2.x
http://github.com/git-for-windows/git
Other
1.01k stars 317 forks source link

git submodule is very slow on Windows 7 x64 #320

Closed webmaster33 closed 9 years ago

webmaster33 commented 9 years ago

git submodule is very slow on Windows 7 x64.

c:\winprg\Git\bin>git --version git version 1.9.4.msysgit.0

I use currently 17 submodules, and listing them is very slow, takes 62 second.

Could be fixed this under Windows? As I've read, there is no such speed problem under Linux with submodules.

webmaster33 commented 9 years ago

Also git.exe submodule update --init --recursive is very slow under Windows.

dscho commented 9 years ago

@webmaster33 yes, this is a known problem with spawning shell processes. It was hard to get it to work properly at all, but the shell always requires a POSIX emulation layer to be spun up.

The most likely solution would be to convert the git submodule script into a C builtin.

If you can spare time to work on this, that would be awesome.

webmaster33 commented 9 years ago

Thanks for your answer.

Yes, this is what I've been reading, that spawning shell processes under Windows is slow. Yeah, it would be good to compile the git submodule to C, tio avoid spawning.

Unfortunately I don't develop under C, so I can just report the problem as a bug to attract attention to it.

eckes commented 9 years ago

As I understand the issue, it could be solved for git submodule by making it a builtin. But I'm experiencing the same problems with filters configured with .gitattributes: I have a smudge/clean filter set up where the clean filter is a PERL script that does some prettyprinting of the code, the smudge filter is just a cat. Switching from one branch to another takes for ages with 2.4.4.windows.2 when the filters are active.

When I either remove the filter configuration or use the old 1.9.5 version, things work fine.

How could this be fixed? Is there any way for it?

dscho commented 9 years ago

@eckes making git submodule a builtin is something that is currently happening. But that would not help the filter issue, not if those filter issues are also shell scripts. That latter issue may be solved by switching to Git for Windows 2.x (which you should do anyway because as of yesterday Git for Windows 1.x has been retired) and using the first line #!/usr/bin/dash in your filters (dash.exe is part of Git for Windows 2.x and should be much snappier than bash.exe).

Since Git for Windows 1.x is retired, I close this ticket. Please feel free to open a new ticket with Git for Windows 2.x if needed.