【发布时间】:2017-10-24 21:14:03
【问题描述】:
最近我已经多次使用 git stash 并且我一直认为它真的很慢,即使在具有单个文件的新存储库上也是如此。我已阅读 this question 关于 git stash 缓慢和 this other one 并尝试了这些问题的所有答案,但实际上没有任何效果。
例如,我已完成以下步骤来重现它:
git inittouch file.txt-
vim file.txt(编辑文件添加2行) git add .git commit -m "Initial commit"-
vim file.txt(再次编辑添加 1 行) time git stash
输出:
$ time git stash
Saved working directory and index state WIP on master: b9454ed Initial commit
HEAD is now at b9454ed Initial commit
real 0m8.042s
user 0m0.000s
sys 0m0.046s
8 秒存储单行是这么多时间。 现在使用 libgit2sharp 进行测试:
static void Main(string[] args)
{
Repository repo=new Repository(@"C:\Users\UserTest\TestGitRepo");
repo.Stashes.Add(new Signature("test", "test@test.com", new DateTimeOffset(DateTime.Now)), "Stash on master");
}
此代码需要 74 毫秒来存储相同的更改。
如果 Libgit2 这么快,那么应该可以加快 git stash 命令的速度。我怎样才能做到这一点?
实际使用的是 windows 10 64bit 和 git 2.11 64bits。其他 git 命令(如状态、添加、提交等)工作正常。
更新:我已经更新到 git 2.13,现在 git stash 是 14,53s...
更新 2:我已更新到 git 2.15 并尝试相同的测试 time git stash 返回 real 0m6,553s。还是很慢……
【问题讨论】:
-
实际上,在我的电脑上创建了一个
sh.exe.stackdump,你能验证git stash确实做了它应该做的事情吗? -
@LasseV.Karlsen 它达到了预期的效果。最后一行在两种情况下都使用我的问题的步骤隐藏。
-
是的,这条线也藏在我这边,但 bash 也因堆栈溢出而崩溃。但这并没有考虑到所花费的时间,所以请忽略我的 cmets。
-
啊,由于某种原因,我设法回到 64 位版本的 git,它在 bash 中存在堆栈溢出异常问题。恢复了 32 位,故障转储消失了。
-
许多 Git 命令被编写为 shell 脚本。在 Linux 和 Unix 系统上,它们在完全合理的时间内运行。在 Windows 上,显然(我不使用 Windows,所以我没有经历过这种情况),它们运行得非常缓慢。因此,Git 人员一直在重写越来越多的 Git 命令,以避免使用 shell 脚本。我想知道修复导致 shell 如此缓慢的任何问题是否更有利可图,但这也许是 Windows 的基础。
标签: c# git libgit2 libgit2sharp git-for-windows