在我的服务器上,我托管了我的个人 git 远程项目(使用 gitosis),并且我构建了一个 Web 界面来浏览存储库(类似于 Github)。
在远程端,你不能做很多事情,因为缺少工作树,这是正确的:顺便说一句,对于存储库浏览器,我几乎可以用很少的命令做所有事情。
除了git blame。
在远程存储库中,我无法找出如何在没有工作树的情况下归咎于文件。你有什么想法吗?
即使在裸存储库中,以下内容也应该有效:
git blame <rev> -- <path>
例如
git blame master -- README.txt
我无法找到 git 文档谈论的地方 -- 选项,顺便说一句,这很有效
实际上,这是必要的,因为 " "除了通常的 " " 之外,git blame
还准备了一个古老的奇怪参数顺序 " "。blame <path> <rev>
blame [<rev>] <path>
这意味着,正如 Git 2.17(2018 年第二季度)将解释“ git blame HEAD COPYING
”在裸存储库中无法运行,而“ git blame HEAD -- COPYING
”运行得很好。
但从 2.17 开始,您将不再需要 ' --
'。
请参阅Junio C Hamano ( ) 的提交 0c668f5(2018 年 2 月 5 日)。(由Junio C Hamano 合并——在提交 0c668f5中,2018 年 2 月 7 日)gitster
gitster
blame
: 收紧命令行解析器
blame <path> <rev>
除了通常的“ ”之外,一个古老的奇怪论证顺序“ ”blame [<rev>] <path>
至少有两个负面影响:
为了区分这两者,它检查最后一个命令行参数是否命名了工作树中的路径,使用
file_exists()
.
但是,“ ”是对存储在修订版blame <rev> <path>
中的内容的每一行进行解释的请求,不需要文件的工作树版本。检查是完全错误的。<path>
<rev>
file_exists()
为了强制错误
file_exists()
的检查工作,代码setup_work_tree()
在这样做之前调用,因为它的路径是相对于项目树的顶层的。
但是,“blame <rev> <path>
”即使在裸存储库中也必须可用,并且没有理由让setup_work_tree()
抱怨和死亡“这个操作必须在工作树中运行”。要更正前者,请切换到检查最后一个标记是否是修订版(如果是,则使用“
blame <path> <rev>
”规则解析参数)。通过删除
setup_work_tree()
和file_exists()
检查来纠正后者——调用这个函数的唯一情况是当我们运行“blame <path>
”时(即没有开始修订并要求责怪工作树文件<path>
,挖掘HEAD
修订),但是有是setup_scoreboard()
在它调用之前调用fake_working_tree_commit()
。
所以简而言之,从 Git 2.17 开始,这将在一个裸仓库中工作:
git blame master -- README.txt
而在 Git 2.22 中,错误消息 " This operation must be run in a work tree
" 应该会消失!
git blame -- path
非裸存储库中的“ ”从工作树开始指责,并且裸存储库中的相同命令出错,因为根据定义没有工作树。
该命令已被教导改为从 HEAD 的提交开始指责,这更有用。
请参阅SZEDER Gábor ( ) 的提交 a544fb0(2019 年 4 月 7 日)。(由Junio C Hamano 合并 -- --在d8620d3 提交中,2019 年 4 月 25 日)szeder
gitster
blame
:当没有给出开始提交时,在裸仓库中默认为 HEAD当
git blame
调用 ' ' 时未指定要开始指责的提交,它将从工作树中给定文件的状态开始。
但是,当在没有开始提交的情况下在裸存储库中调用时,没有工作树状态可以开始,并且它会因以下错误消息而死:$ git rev-parse --is-bare-repository true $ git blame file.c fatal: this operation must be run in a work tree
这是误导性的,因为它暗示 '
git blame
' 在裸存储库中根本不起作用,但事实上,当它被赋予开始提交时,它确实可以正常工作。当然,我们可以改进错误消息,但是让我们在裸存储库中默认为 HEAD,因为这很可能是用户想要的(如果他们想从另一个提交开始,那么他们会在第一名)。
'
git annotate
' 只是围绕 'git blame
' 的一个薄包装,因此在相同的情况下它会打印相同的误导性错误消息,此补丁也修复了它。
注意:如果您按照Jakub Narębski的建议使用gitweb 来查看“责备”,那么 gitweb中有一个相当老的错误,其中 javascript 操作模式下的增量责备输出从未起作用。
这已通过 Git 2.24(2019 年第四季度)修复。
请参阅Robert Luberda ( ) 的提交 52bd3e4(2019 年 10 月 27 日)。(由Junio C Hamano 合并 -- --在提交 0d6799e中,2019 年 10 月 30 日)roblub
gitster
gitweb
:在 javascript-actions 模式下正确存储以前的版本签字人:Jonathan Nieder
签字人:Robert Luberda
签字人:Jakub Narębski如果没有此更改,设置
$feature{'javascript-actions'}{'default'} = 2 ;
在
gitweb.conf
打破gitweb的责备页面:点击页面第二列显示的行号没有效果。作为比较,禁用 javascript-actions 时,单击行号会加载该行的先前版本。