问题标签 [blame]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
134 浏览

git - Git责备-M:意外行为

当使用 git blame -M 来检测一个文件中的代码移动时,我得到了我无法向自己解释的结果。

首先我提交以下文件(file.cpp):

然后我通过移动第一行中的内容并添加新内容来修改它:

日志现在如下所示:

现在我责备:

我想知道为什么包含 func1() 的行不被识别为已移动。我试图减少所需字符的数量(即 -M4 等)。此外,由于 -w 选项,空格应该无关紧要。

0 投票
2 回答
4553 浏览

git - git blame:合并后的正确作者

GIT 合并引入了一个新的提交。这会导致“git blame”出现问题:合并的行似乎是由进行合并的开发人员提交的。

我可以理解这是冲突更改的情况(因为他解决了冲突)。但是有没有办法让不冲突的行不发生这种情况?“git责备”的一些选择?

如果没有办法,当您进行大量合并时,这基本上会使“git blame”几乎无用 - 而GIT鼓励大量合并。

SVN 是否存在非冲突合并的问题?我不这么认为,但我可能是错的,因为我在使用 SVN 时(可以理解地)避免了像瘟疫这样的分支。

0 投票
1 回答
158 浏览

git - 告诉 git-blame 使用导入的历史记录

我有一个存储库,它是通过从 SVN 存储库复制文件(而不是历史记录)创建的,此后在顶部添加了许多更改。

此后,我将 SVN 中的历史记录转换为 git,并将其与git merge -s ours.

问题是当我git blame对文件执行 a 时,它仍然显示每一行都是由 git 存储库中的初始提交创建的(它从 SVN 复制了所有文件),而不是真正负责的 SVN 提交。

有没有办法在不重写所有 git 历史的情况下解决这个问题?

0 投票
0 回答
141 浏览

version-control - 有没有办法在同时显示注释的窗口上合并可视合并工具?

我正在使用 Mercurial,但我想任何知道它下面的版本控制系统的合并工具都可以做几件事情,一个不知道版本控制系统并且只在两个不同文件夹中看到两个“文件”的合并工具,永远做不到。

我一直在使用KDIFF3,最近尝试了BeyondCompare,但他们都不会这样做,至少我无法弄清楚。

我想要做的最好显示在这张图片中,一个注释列,甚至可能能够从这些注释列打开其他窗口,这样我就可以在尝试进行合并时浏览特定文件的特定版本以查看上下文。

在这里的图像中,我展示了一种双向合并,但同样适用于三向合并。在显示的实际文件内容的右侧或左侧,我想要一个装订线或右侧注释列,显示此更改来自何处的某种注释。由于 Mercurial 十六进制 id 相对不友好且无用,并且由于 repository-local-revision-numbers 是本地存储库,因此我认为基于提交注释的简短文本描述将是最有帮助的。当然,使用 Mercurial,99% 的提交评论会说“合并”,仅此而已。(呻吟。)但是让我们假装一分钟,我们没有使用让我们在合并时瘫痪的工具和工作流程,相反,我们每次都可以显示一个有用的提交评论:

在此处输入图像描述

现在复杂合并的工作流程对我来说是这样的:

  1. 使用我的分布式版本控制工具(mercurial),从另一个实际上是分支的存储库中提取更改。合并。TortoiseHg 的合并窗口通常是我开始这一切的地方。这反过来又让我配置了一个合并工具(除了比较或 Kdiff3)。

  2. 但是,似乎没有任何合并工具(我见过)可以告诉,“嘿,你不只是在两个完全不同的文件夹中将两种或三种方式与不同版本的文件合并,与我告诉过你的名称,但这些文件也是具有完整编辑历史记录的文件,可用于向你的人展示实际上下文,这些行更改来自的提交及其提交注释,通常有一个错误编号作为其中的一部分提交将使进行合并的人能够看到到底发生了什么。

例如,我会从 Mercurial 更改为 Git,甚至是为了获得真正的合并体验,而不会强迫我手动执行我认为我的工具可以自动为我执行的操作。我正在使用 Mercurial、TortoiseHG 和 KDIFF3,如果我可以从 KDIFF3 更改为其他工具,或者做任何事情来在一个屏幕上获取注释并合并在一起,我愿意这样做。

0 投票
1 回答
160 浏览

git - Git:识别从另一个文件移动的行

我有一个提交,它在一个提交中从几个文件中切出块并将它们放入几个新文件中,而不更改或添加行。使用 vimdiff 手动验证没有更改或添加。

是否可以使用 git 找出从哪些文件中移动了哪些行以及是否有行添加到该提交中的新文件中?如果是,那么如何?

git blame -C file仍然将一些块归为新文件。

例如,在复制的一个目标文件中,从一个原始文件移动了两个块:一个 388 行,另一个 30 行。在这种情况下git blame -C file,将 12 个块分配给 HEAD 的新文件,其中散布着分配给旧版本原始文件的块。

一个简单的综合测试会产生预期的结果:

然而,真正的提交修改了不同的内容,并且在它之前有很长的历史。

0 投票
2 回答
1893 浏览

git - 我如何忽略 TortoiseGit 责备中的空格变化

如果我想忽略 git blame 中的空格更改,我可以使用-w选项。但是我怎么能在 TortoiseGit Blame GUI 工具中做到这一点呢?这甚至可能吗?

0 投票
1 回答
4143 浏览

git - git: blame the previous version of each line changed in a given commit

For a given commit, I need to run blame on the previous version of each line changed but said commit.

Having a commit that changes lines 2 and 3 on file a, I want a way to see the output of git blame commit^ limited to the preamble and the lines 2 and 3.

How can I do that?

EDIT

Seems like I have to explicitly specify that I'm looking for a way to do the above programmatically, and not examining the commit with my own eyes, determining which lines of which files where changed, and then manually run git blame for each single changed file.

0 投票
2 回答
1182 浏览

git - git blame 如何确定谁编辑了文件的一行?

使用

将显示有关每一行的所有信息,例如谁在哪个提交中添加了这一行,以及何时添加,但据我所知,每次更改文件时,Git 都会添加一个全新的对象。那么Git在哪里存储关于每一行的这些信息呢?

0 投票
1 回答
366 浏览

mercurial - Hg 寻呼机扩展不适用于“责备”

我正在使用带有pager扩展程序的 Merucial,并且我正在尝试配置为使用寻呼机blame,但它不起作用。

我的.hgrc文件中有:

其他命令 - diffstatushelplog正确地通过寻呼机路由,但blame不是。关于为什么的任何想法?

0 投票
2 回答
716 浏览

git - 在版本控制中逐字责备/注释?

是否可以在版本控制中重建逐字的历史记录?理想情况下,我想做的是 1)我指出感兴趣的行的范围,2)让程序找出以前版本中的相应行号,因为代码经常在版本之间上下移动(可能会限制版本范围,比如从第 19 版开始,或者从一周前开始),3)打印出逐字的历史记录,或者是最后一次更改单词组的版本,或者更改单词组的作者。所以它有点像svn blamegit blame逐字逐句。

如果做不到这一点,是否有可以执行上述 #1 和 #2 的工具?也就是说,1)我指出感兴趣的行的范围,2)让程序找出以前版本中对应的行号,3)程序会打印出这些行的历史(当有变化时)。

svn 或 git 对我来说真的很有帮助。