Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git如何确定谁编辑了一行文件?_Git_Version Control_Blame - Fatal编程技术网

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

git如何确定谁编辑了一行文件?,git,version-control,blame,Git,Version Control,Blame,使用 将显示关于每一行的所有信息,例如谁在哪一行中添加了这一行,何时提交,但据我所知,Git将在每次更改文件时添加一个全新的对象。那么Git在哪里存储关于每一行的信息呢 Git在哪里存储关于每一行的信息 Git不会将此信息存储在任何地方,至少不会显式地存储。每次运行git文件,都会根据git对象存储中存储的对象动态计算此信息。如果您有兴趣知道这是如何做到的,您可以阅读git。正如@mvp所说,“它没有”。回答您的评论,即“此流程的流程”-它的工作原理大致类似于一系列的git diffs,从文件的

使用

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

Git在哪里存储关于每一行的信息

Git不会将此信息存储在任何地方,至少不会显式地存储。每次运行
git文件
,都会根据git对象存储中存储的对象动态计算此信息。如果您有兴趣知道这是如何做到的,您可以阅读git。

正如@mvp所说,“它没有”。回答您的评论,即“此流程的流程”-它的工作原理大致类似于一系列的
git diff
s,从文件的最新版本开始,向后工作,直到每一行都有一个指定的原点

假设您有一个只有四行的短文件,它是最新的(即
HEAD
中的版本)。进一步假设
git diff
显示在修订版
HEAD~1
中只有前三行,我添加了最后一行(第四行)。那么第4行的“罪过”将是我的:它在上一个版本中不存在,在当前版本中也存在,所以我必须添加它

这就留下了一个问题,那就是找出这三句话的“罪魁祸首”是谁。所以现在git必须将头1和头2区分开来。如果这三行代码都与
HEAD~2
中的内容一模一样-例如,如果从
HEAD~2
更改为
HEAD~1
只是删除了一些行,那么我们必须继续追溯历史


但是,在某个时刻,
git diff
将显示有人添加了第1行、第2行和/或第3行(在某些早期版本中),可能是在删除其他行时添加的;或者在最坏的情况下,git将到达一个“根提交”:一个没有父级的提交。无论如何,无论是谁做出了导致这些行出现的承诺,都应该受到责备。

@Cupcake感谢您的修改,我将阅读此链接,直到我不再犯同样的错误。威廉,不要对自己太苛刻,这个问题只需要稍微清理一下。相信我,我已经看到了非常非常糟糕的问题:/3月份的代码,在C语言中,我只知道一点Ruby,你能用人类可读的描述来总结代码吗?像这样:首先它从这个对象读取这个信息,然后从那个对象读取那个信息,然后把它们加在一起,然后wallah!,你得到你想要的!我不想知道底层的细节,只想知道这个过程的流程
git blame file