我有一个线程C程序,它在主应用程序旁边的pthread中通过git gc
启动popen
。主线程启动其他git命令。
大多数其他git命令没有问题,除非我通过git commit -m "msg"
提交。
由于某种原因,当它正在提交然后另一个线程尝试并行运行垃圾收集器时,应用程序崩溃了。
然而,通过git gc &! git commit -m "msg" &
同时在终端上执行git commit和git gc似乎在大多数时间都有效,但是几次提交过程退出并退出代码128。
也许这就是问题所在?如何确保垃圾收集器并行成功运行?垃圾收集器是否意味着并行运行?
我发现了这个邮件列表线程,但它似乎没有太多信息:https://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02138.html
答案 0 :(得分:1)
除非您正在执行很多的git操作,例如git commit --amend
或git rebase
或创建大量对象,否则经常启动git gc
无用。请查看git gc NOTES:
另一方面,当
git gc
与另一个进程同时运行时,存在删除另一个进程正在使用但尚未创建引用的对象的风险。如果其他进程稍后添加对已删除对象的引用,则这可能只会导致其他进程失败或可能损坏存储库。
也许不是并行启动git gc
,而是应该根据自己的需要进行调整?
配置使用git config gc.*
完成,特别是gc.auto
。