博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git grep简介
阅读量:6578 次
发布时间:2019-06-24

本文共 4193 字,大约阅读时间需要 13 分钟。

转载:

 

使用Git Grep进行搜索

用git grep 命令查找Git库里面的某段文字是很方便的. 当然, 你也可以用unix下的'grep'命令进行搜索, 但是'git grep'命令能让你不用签出(checkout)历史文件, 就能查找它们.

例如, 你要看 git.git 这个仓库里每个使用'xmmap'函数的地方, 你可以运行下面的命令:
$ git grep xmmapconfig.c:               contents = xmmap(NULL, contents_sz, PROT_READ,diff.c:         s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, 0);git-compat-util.h:extern void *xmmap(void *start, size_t length, int prot, int flaread-cache.c:   mmap = xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE,refs.c: log_mapped = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, logfd, 0);sha1_file.c:    map = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, fd, 0);sha1_file.c:    idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd, 0);sha1_file.c:                    win->base = xmmap(NULL, win->len,sha1_file.c:                    map = xmmap(NULL, *size, PROT_READ, MAP_PRIVATE, fsha1_file.c:            buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);wrapper.c:void *xmmap(void *start, size_t length,
 
如果你要显示行号, 你可以添加'-n'选项:
$>git grep -n xmmapconfig.c:1016:          contents = xmmap(NULL, contents_sz, PROT_READ,diff.c:1833:            s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd,git-compat-util.h:291:extern void *xmmap(void *start, size_t length, int prot, intread-cache.c:1178:      mmap = xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_refs.c:1345:    log_mapped = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, logfd, 0);sha1_file.c:377:        map = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, fd, 0);sha1_file.c:479:        idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fdsha1_file.c:780:                        win->base = xmmap(NULL, win->len,sha1_file.c:1076:                       map = xmmap(NULL, *size, PROT_READ, MAP_PRsha1_file.c:2393:               buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fdwrapper.c:89:void *xmmap(void *start, size_t length,
 
如果我们想只显示文件名, 我们可以使用'--name-onley'选项:
$>git grep --name-only xmmapconfig.cdiff.cgit-compat-util.hread-cache.crefs.csha1_file.cwrapper.c
 
我们可以用'-c'选项,可以查看每个文件里有多少行匹配内容(line matches):
$>git grep -c xmmapconfig.c:1diff.c:1git-compat-util.h:1read-cache.c:1refs.c:1sha1_file.c:5wrapper.c:1
 
现在, 如果我们要查找git仓库里某个特定版本里的内容, 我们可以像下面一样在命令行末尾加上标签名(tag reference):
$ git grep xmmap v1.5.0v1.5.0:config.c:                contents = xmmap(NULL, st.st_size, PROT_READ,v1.5.0:diff.c:          s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd,v1.5.0:git-compat-util.h:static inline void *xmmap(void *start, size_t length,v1.5.0:read-cache.c:                    cache_mmap = xmmap(NULL, cache_mmap_size, v1.5.0:refs.c:  log_mapped = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, logfdv1.5.0:sha1_file.c:     map = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:sha1_file.c:     idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fdv1.5.0:sha1_file.c:                     win->base = xmmap(NULL, win->len,v1.5.0:sha1_file.c:     map = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:sha1_file.c:             buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd

我可以看到"1.5.0版"和当前版本间一些区别: 在“1.5.0版"中, xmmap没有在wrapper.c中出现.


我们也可以组合一些搜索条件, 下面的命令就是查找我们在仓库的哪个地方定义了'SORT_DIRENT'.
$ git grep -e '#define' --and -e SORT_DIRENTbuiltin-fsck.c:#define SORT_DIRENT 0builtin-fsck.c:#define SORT_DIRENT 1

 

我不但可以进行“与"(both)条件搜索操作,也可以进行"或"(either)条件搜索操作.

$ git grep --all-match -e '#define' -e SORT_DIRENTbuiltin-fsck.c:#define REACHABLE 0x0001builtin-fsck.c:#define SEEN      0x0002builtin-fsck.c:#define ERROR_OBJECT 01builtin-fsck.c:#define ERROR_REACHABLE 02builtin-fsck.c:#define SORT_DIRENT 0builtin-fsck.c:#define DIRENT_SORT_HINT(de) 0builtin-fsck.c:#define SORT_DIRENT 1builtin-fsck.c:#define DIRENT_SORT_HINT(de) ((de)->d_ino)builtin-fsck.c:#define MAX_SHA1_ENTRIES (1024)builtin-fsck.c: if (SORT_DIRENT)
 
我们也可以查找出符合一个条件(term)且符合两个条件(terms)之一的文件行. 例如我们要找出名字中含有‘PATH'或是'MAX'的常量定义:
$ git grep -e '#define' --and \( -e PATH -e MAX \) abspath.c:#define MAXDEPTH 5builtin-blame.c:#define MORE_THAN_ONE_PATH      (1u<<13)builtin-blame.c:#define MAXSG 16builtin-describe.c:#define MAX_TAGS     (FLAG_BITS - 1)builtin-fetch-pack.c:#define MAX_IN_VAIN 256builtin-fsck.c:#define MAX_SHA1_ENTRIES (1024)

 

你可能感兴趣的文章
怎么检查网站的死链接呢?
查看>>
scrapy爬虫框架实例一,爬取自己博客
查看>>
JAVA简单选择排序算法原理及实现
查看>>
Spring MVC实现Junit Case
查看>>
HttpClient通过Post方式发送Json数据
查看>>
C# 枚举显示中文
查看>>
React是UI的未来吗?
查看>>
饿了么口碑实现超30亿美元独立融资 阿里软银领投
查看>>
火热的比特币创始人“中本聪”到底是谁?国外网友又有了新猜测!
查看>>
新西兰信报:移民规则变化 赴新中国学生人数减少
查看>>
中国人社部:2018年15个省(区、市)调整最低工资标准
查看>>
2019年春运启动 4683公里新线首次投入春运
查看>>
“小候鸟”返乡过年 无人陪伴儿童出行迎高峰
查看>>
2019年福彩新春贺词
查看>>
阿里云成中国唯一一家进入Forrester大数据服务榜单的科技公司
查看>>
深度预警:深入理解HBase的系统架构
查看>>
从 Java 到 Scala(一):面向对象谈起
查看>>
JSP第六篇【自定义标签之传统标签】
查看>>
Weex 事件传递的那些事儿
查看>>
Android性能优化:关于 内存泄露 的知识都在这里了!
查看>>