社区首页 >问答首页 >libgit:在提交中获取文件的最快方法

libgit:在提交中获取文件的最快方法
EN

Stack Overflow用户
提问于 2015-12-08 05:23:15
回答 1查看 419关注 0票数 2

我需要迭代存储库的提交,并为每个提交获取受影响的文件。这是目前我的巨大的性能瓶颈。

我在libgit函数上有一个C++包装器,但是这个片段应该是可以理解的。

代码语言:javascript
代码运行次数:0
复制
std::vector<std::string> Commit::getAffectedFiles() const {
  git_tree* tree = nullptr;
  git_tree* tree2 = nullptr;
  int error = git_commit_tree(&tree, get());
  throw_on_error(error);

  try {
    error = git_commit_tree(&tree2, parent(0).get());
  } catch (GitException e) {
    tree2 = nullptr; // probably initial commit
  }
  git_diff* diff = nullptr;
  git_diff_tree_to_tree(&diff, getRepo(), tree2, tree, 0);  

  std::vector<std::string> ret;
  git_diff_foreach(diff,
  [](const git_diff_delta* entry, float progress, void* payload) {
    std::string str = entry->old_file.path;
    ((std::vector<std::string>*)payload)->push_back(str);
    return 0;
  }, nullptr, nullptr, nullptr, &ret);
  git_tree_free(tree);
  git_tree_free(tree2);
  git_diff_free(diff);
  return ret; 
}

我只能希望我在这里做了一些根本错误的事情。

例如

代码语言:javascript
代码运行次数:0
复制
git log --stat > /dev/null

速度要快得多,并提供相同的信息。

perf按顺序报告git__strncmpgit_buf_rfind_nextgit_tree__parse上的大多数使用情况。

我知道这是IO很重,但我不认为有一个简单的方法来减少这个或并行运行这一点。

EN

回答 1

Stack Overflow用户

发布于 2015-12-11 09:11:26

这相当于git在内部所做的事情,尽管git本身已经有更多的人关注它的性能,而libgit2在这方面的投资也没有那么多。

然而,最近有几个补丁被合并到libgit2 2的master分支中,可以节省多达40%的树解析时间。我建议您试一试,看看得到了哪些数字(补丁也应该很容易移植到早期版本)。

还要考虑到,您的git版本很可能是在发布模式下编译的,而libgit2默认是在调试模式下编译的,所以如果您还没有激活发布模式,请使用-DCMAKE_BUILD_TYPE=Release运行cmake。这也大大加快了这些解析操作。

具体而言,PR 3508和提交0174f2fc4364

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34157047

复制
相关文章
超简单网页自动刷新插件介绍
个别场景需要手动刷新页面等待某个结果,刷太频繁,很累,时间长不刷又怕错过,肿么办?
明明如月学长
2021/08/31
4.9K1
超简单网页自动刷新插件介绍
网页刷新方法集合
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
Java架构师必看
2021/03/22
6790
JSP 防止网页刷新重复提交数据
if session("ok")=true then    response.write "错误,正在提交"    response.end end if
阳光岛主
2019/02/19
11.6K0
怎么自动刷新jwt?
如果用户一直在操作,当jwt颁发的token凭证到了过期时间需要有一个机制能自动延长过期时间。除非用户长时间没有操作,那是需要强制重新登录的。
蛋蛋编程手记
2022/07/27
3.3K0
网页|利用touch实现下拉刷新
下拉刷新在常见的手机app上大多都有运用。下拉刷新即向下拉重新加载、刷新。下拉刷新在下拉到松手的过程中,经历了三个状态分别是:当前手势滑动位置与初始位置差值大于零时,提示正在进行下拉刷新操作。之后当下拉到一定值时,显示松手释放后的操作提示。最后当下拉到达设定最大值松手时,执行回调,提示正在进行更新操作。如下图则为下拉刷新的实现效果:
算法与编程之美
2020/07/16
1.7K0
网页|利用touch实现下拉刷新
自动刷新页面
script> <!--  var limit="0:15" if (document.images){ var parselimit=limit.split(":") parselimit=parselimit[0]*60+parselimit[1]*1 } function beginrefresh(){ if (!document.images) return if (parselimit==1) window.location.reload() else{  parselimit-=1 curmin
张善友
2018/01/19
2.4K0
前端自动刷新工具
Browsersync能让浏览器实时、快速响应您的文件更改(html、js、css、sass、less等)并自动刷新页面。更重要的是 Browsersync可以同时在PC、平板、手机等设备下进项调试。
李维亮
2021/07/09
1.1K0
网页自动提交
昨天的视频python模拟在线测试1。 核心代码: timer = setInterval(function() { // 时间到自动提交试卷 if (count==0){ clearInterval(timer) alert("时间到,已自动交卷") } count--; tag3.innerHTML = showNum(count % 60) tag2.innerHTML = showNum(parseInt(count
叶子陪你玩
2021/12/01
1.6K0
网页自动提交
怎样编写健壮的代码
怎样编写健壮的代码 怎样编写健壮的代码.png 代码的几种特性 鲁棒性Robust(健壮性) 系统在异常和危险情况下生存的关键 容错性 可移植性 反例: 脆弱、僵化、顽固且粘滞性高 如何构建高效、健壮
一个会写诗的程序员
2019/07/08
1.8K0
javascript_时间自动刷新
=========================================================
Hongten
2018/09/13
1.7K0
javascript_时间自动刷新
Weex iOS端的自动刷新和调试
最近开始接触weex。目前weex尚不成熟,官方文档有些粗糙,初学者难免碰壁。这里分享两条我的初学经验,供参考。
全栈程序员站长
2022/07/20
1.2K0
Weex iOS端的自动刷新和调试
如何判断是关闭还是刷新网页
我们在写js代码的时候,经常要判断网页是否被关闭了,如果是被关闭了,就执行某段代码,这个可以用HTML的onbeforeunload事件来执行一段js代码,但是如果网页只是被刷新的话,也同样会触发onbeforeunload事件,下面这段js代码可以判断是否关闭 //判断是关闭还是刷新 if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey) {     alert("你关闭了浏览器"); } 这段代码就是判断触发onbeforeunload事件时,鼠标是否点击了关闭按钮,或者按了ALT+F4来关闭网页,如果是,则认为系统是关闭网页,否则在认为系统是刷新网页
源哥
2018/08/28
3K0
通过MySQL自动同步刷新Redis
在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库。这俩家伙简直可以用“男女搭配,干活不累”来形容,搭配起来使用才能事半功倍。本篇我们就这两者如何合理搭配以及他们之间数据如何进行同步展开。 一般地,Redis可以用来作为MySQL的缓存层。为什么MySQL最好有缓存层呢?想象一下这样的场景:在一个多人在线的游戏里,排行榜、好友关系、队列等直接关系数据的情景下,如果直接
逸鹏
2018/04/11
7.9K0
通过MySQL自动同步刷新Redis
Bus集成webhooks实现自动刷新
内网穿透网站:https://natapp.cn/ 我需要将127.0.0.1:8848利用内网穿透映射成为公网地址,所以注意如下配置:
别团等shy哥发育
2023/02/25
9190
Bus集成webhooks实现自动刷新
网页自动跳转_网页跳转到其他网站
关闭浏览器,然后删除c:/program files/Internet Explorer/3348201013.dat
全栈程序员站长
2022/11/10
2.1K0
vue监听页面刷新事件_vue监听数据变化自动刷新
注意:有返回值(’ ‘,true,false…都可以)才能弹出显示,或者有需要执行的事件也行。
全栈程序员站长
2022/11/01
5.8K0
[开发技巧]·html实现返回页面并自动刷新
在进行APP开发或作制作网站时,有时候会遇到你下一级页面操作过以后会改变上一级页面的结果。这时候就需要我们去刷新上一级页面。 一般可以采取三种方式:
小宋是呢
2019/06/27
6.1K0
springboot+idea热部署(自动刷新)
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。
全栈程序员站长
2022/09/14
1.6K0
springboot+idea热部署(自动刷新)
用Python写网页的自动签到
2.下载chromedriver驱动; 找到符合自己浏览器版本的chromedriver驱动,下载解压后,将chromedriver.exe文件放到Python目录下的Scripts目录下,也可以添加环境变量到Path中。
用户2590762
2021/08/11
2.5K0
点击加载更多

相似问题

当窗口调整大小时,如何使div不收缩?

13

在Chrome中调整flexbox大小时避免滚动条?

10

Flexbox元素在调整窗口大小时重叠

23

CSS Flexbox:沿交叉轴收缩并显示滚动条

30

当窗口调整大小时,画布拒绝展开或收缩。

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文