这一直困扰着我一段时间,但搜索却没有提示。
问题:
当我在包含git diff
的PHP文件上执行Class
时,每个hunk描述都有类名,没有提到方法名。
例如:
@@ -351,7 +351,7 @@ class Session
$form->setError($field, $subpassValid['msg']);
}
// E-Mail address error checking
$field = "email"; //Use field name for email
- if(!isset($subemail) || strlen($subemail = trim($subemail)) == 0){
+ if(!$subemail || strlen($subemail = trim($subemail)) == 0){
$form->setError($field, "* Email not entered");
@@ -373,7 +373,7 @@ class Session
...
问题:
有没有办法告诉git
显示方法名称而不是/在类名旁边?
修改
其他信息:
diff version: 2.8.1
git version: 1.7.6 (from the git-core PPA)
OS: Ubuntu 9.10
我最初从股票Ubuntu repos获得了git版本1.7.0.4,但更新了它,希望它是一个bug。不幸的是,这并没有解决问题。
<击>的 EDIT2: 撞击>
<击> 经过更多测试后,如果函数声明完全缩进(使用空格或制表符), git diff
似乎没有获取函数名称。这似乎是git
中的错误。
答案 0 :(得分:17)
如果您发现自己遇到此问题,可能是因为git
允许diff
定义hunk标头。如果要强制git
使用其预定义的PHP,请将以下行放在git存储库的根文件夹中的.gitattributes
或存储库中的.git/info/attributes
文件中:
*.php diff=php
(同样支持其他语言。documentation中提供了内置模式列表。)
应该可以通过在git version >= 1.4
~/.gitattributes
git config --global core.attributesfile "~/.gitattributes"
或者如果你想全局设置
/etc/gitattributes
警告:如果您个人在全球范围内设置此选项,那么在运行git diff
时,您的同行可能会得到不同的结果,因为他们不会检查.gitattributes
与存储库的副本。
答案 1 :(得分:7)
我不太明白为什么它不起作用the way it should。
作为临时解决方案,请将以下内容添加到.gitattributes
:
*.php diff=phpf
这些行到.git/config
或~/.gitconfig
:
[diff "phpf"]
xfuncname = "^[\t ]*(((public|protected|private|static)[\t ]+)*function.*)$"
对于永久性解决方案,请直接在git@vger.kernel.org mailing list向Git开发人员询问。
答案 2 :(得分:0)
由于Git 2.19(2018年第三季度)的差异可能会更好,因为.php
的userdiff模式已更新。
请参见commit 1ab6316的commit 9992fbd,Kana Natsuno (kana
)(2018年7月3日)。
(由Junio C Hamano -- gitster
--在commit d3f0938中合并,2018年7月24日)
userdiff:在PHP Hunk标头中支持新关键字
最新版本的PHP支持
interface
,trait
,abstract class
和final class
。
该补丁修复了PHP块头regexp以支持所有这些关键字。