我看到很多关于使用方法的问题,git blame
但我并不真正了解它们.
我blame
在github界面上的文件顶部看到一个按钮.单击它后,它会在左侧栏上显示一些带有用户名的差异.这表明了什么?
除了GitHub之外,为什么实际使用git blame?
我想看看谁为文件贡献了哪一行/更改.git-blame正是如此.那么SourceTree有一个git-blame视图?
$ pwd
/data/mdi2/classes
$ git blame -L22,+1 -- utils.js
99b7a802 mdi2/utils.js (user 2015-03-26 21:54:57 +0200 22) #comment
$ git blame -L22,+1 99b7a802^ -- utils.js
fatal: no such path mdi2/classes/utils.js in 99b7a802^
Run Code Online (Sandbox Code Playgroud)
您已经注意到,该文件位于该提交的不同目录中
$ git blame -L22,+1 99b7a802^ -- ../utils.js
c5105267 (user 2007-04-10 08:00:20 +0000 22) #comment 2
Run Code Online (Sandbox Code Playgroud)
尽管如此
The origin of lines is automatically followed across whole-file renames (currently there is no option to turn
the rename-following off)
Run Code Online (Sandbox Code Playgroud)
责备不遵循重命名.为什么?
更新:简答
git blame
按照重命名但不是 git blame COMMIT^ -- <filename>
但是,通过批量重命名和大量历史记录手动跟踪文件重命名太难了.我认为,必须修复此行为以静默跟随重命名 …
我不确定这是一个更新还是我启用了一个设置,但我看到我的代码用与代码内联的 git Blame 用户名进行了注释。
git Blame 操作表示它已关闭。
当我单击用户名时,包含行号的列将展开并显示时间戳。
如何禁止用户名出现?
点击后
我有大约 40 个 git 存储库,其中大多数都有一个.git-blame-ignore-revs
用于与git blame
. blame.ignorerevsfile=.git-blame-ignore-revs
因此,我没有使用 本地配置,而是将其应用到我的全局git 配置中。
但是,少数没有此类文件的存储库会受到它的影响:git blame
在它们上运行会导致fatal: could not open object name list: .git-blame-ignore-revs
.
有没有办法告诉 git 读取此类文件(如果存在),否则忽略它?这将是理想的:设置简单,但如果不存在这样的文件也不引人注目。
注意:拥有可选 文件很有用的另一个原因.git-blame-ignore-revs
是,几乎所有 git 存储库都是在没有这样的文件的情况下创建的,只有在稍后才会添加它。然而,当二分旧的提交时,我们最终可能会返回到文件存在之前的touch
某个点,然后我们必须完成二分,然后再次删除它才能返回到 HEAD 提交。即使我对文件使用本地配置,这种极其烦人的情况仍然会发生。出于这个原因,我确实认为默认行为应该是忽略该文件(如果它不存在)。
我使用perl脚本修改php git存储库中的所有制表符并将它们全部更改为4个空格.
$ find -iname \*.php -exec perl -pi -e "s/\t/ /g" {} \
Run Code Online (Sandbox Code Playgroud)
我可以提交这个更改git commit
,但它会在我提交之后将我标记为内部所有更改行的作者git blame
.
有没有办法实现这个大规模的改变,不会让我成为改变行的作者,但保留原作者?这是我们在项目中并不想丢失的很多历史.
我们用4个空格替换制表符的目的不是为了使git责备中的东西看起来不同,而是遵循适当的PEAR编码标准.例如没有标签,使用4个空格进行缩进.
我正在研究由少数开发人员共享的项目,如何在android studio中了解开发人员的责任?任何捷径或任何想法?这将有助于我们了解代码责任.
cloc
使每个类型的每种语言(空白,注释或代码)能够计算存储在目录中的代码行数.
git blame
使人能够看到文件的哪个部分属于谁.
我正在寻找一种结合两者的方法,以便获得一个(三维)矩阵,列出每个用户每种语言的每种类型的代码行.
是否有优雅内置的方式来做到这一点还是应该一个"报废"的"怪"的部分(运行grep
后git blame
)每个用户的,并运行cloc
它们来计算表中的每个用户?
编辑:
天真的方法(基于@Jubobs的评论):
grep "^[^(]*([^)]*)"
捕捉到所有用户的列表,并与检索唯一身份sort
和uniq
.grep "^[^(]*($user)"
使得仅保留该用户的行.这或多或少是如何生成所需的输出.但是正如人们所看到的,这种方法进行了大量的复制(或至少存储在内存中),并且实际上可以通过在文件上运行一次而不是多次来计算每个用户的行数.
期望的输出:
就像是:
+--------+--------------------------------+--------------------------------+
|User | C# | XML |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| | files | blank | comment | code | files | blank | comment | code |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| Foo | 12 | 75 | 148 | 2711 | 2 | 42 | 0 | …
Run Code Online (Sandbox Code Playgroud) 使用Xcode 10.2,我可以选择“作者”视图,然后从底部选择器中选择一个先前的 git修订版本:
但是对于Xcode 11 beta,当我选择“作者”视图时,由于缺少选择器,我无法选择一个过时的修订版本:
该功能是否已删除,或者是否有新的步骤要责备以前的修订的代码行?为了进一步说明,我想在Xcode 11中看到过去的责备,就像GitHub 责备特定的先前修订版一样。
当我在 IntelliJ IDEA 中使用 git annotate 时,某些行的作者用户名与此提交的作者姓名不同,如下图:
正如你所看到的,fan.qp
和Qp
不一样,为什么会这样呢?
当我使用 bash 或 SourceTree 运行时git blame
,两个名称是相同的。
这是IDEA的错误吗?