当前位置:  开发笔记 > 编程语言 > 正文

什么是git log -L的"函数名regex":<funcname>:<file>

如何解决《什么是gitlog-L的"函数名regex":<funcname>:<file>》经验,为你挑选了1个好方法。

我的文件中有以下Swift函数 Main/VProj/AppModel.swift

    func createItemAndSegment(image:UIImage, completionHandler:(Item?, NSError?)->Void) {
        \\[...]
    }

git log -L ::州的文件

-L ,:

-L::

跟踪中","(或函数名称regex )给出的行范围的演变.

但命令

git log -L :createItemAndSegment:Main/VProj/AppModel.swift

git log -L :'createItemAndSegment':Main/VProj/AppModel.swift

git log -L :'/createItemAndSegment/':Main/VProj/AppModel.swift

都失败了,错误 starting at line 1: no match

当文档说:"功能名称正则表达式"时,它应该是什么样的?



1> Brian Campbe..:

funcname应是一个正则表达式匹配函数名,和一个字符串,没有特殊的正则表达式字符应该是一个有效的正则表达式,那么你的第一个例子,git log -L :createItemAndSegment:Main/VProj/AppModel.swift应该工作.

但是,为了使它工作,Git需要能够确定哪些行是函数声明.它有一个默认的正则表达式,它假定以字母字符,下划线或美元符号开头的任何行(没有前导空格)是函数声明的开头,并且使用-L ::语法将搜索也是一个函数声明匹配您的模式,直到下一个函数声明或文件结尾.

在某些语言中,这种启发式方法并不合适.例如,如果函数或方法声明嵌套在类中并因此缩进,则它将不会接受这些声明.为此,您需要定义自定义函数头正则表达式.在.gitattributes"定义自定义大块头"部分介绍了如何做到这一点.首先,您将.gitattributes在项目的顶层创建一个包含以下内容的文件:

*.swift diff=swift

然后在您.git/config或您的全局中~/.gitconfig,您将定义一个如何查找这些声明的正则表达式.我不太了解Swift能够告诉你什么是合适的正则表达式,但它可能类似于以下内容(我基于内置的Python正则表达式):

[diff "swift"]
    xfuncname = ^[ \t]*((class|func)[ \t].*)$

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有