首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Git能跟踪单个函数从一个文件到另一个文件的移动吗?多么?

Git能跟踪单个函数从一个文件到另一个文件的移动吗?多么?
EN

Stack Overflow用户
提问于 2011-02-05 17:25:10
回答 5查看 12K关注 0票数 79

我多次遇到这样的说法:如果将单个函数从一个文件移动到另一个文件,Git可以跟踪它。例如,这一项说,"Linus说,如果您将一个函数从一个文件移动到另一个文件,Git将告诉您该单个函数在整个移动过程中的历史。“

但我对Git的一些设计有一点了解,我不知道这是怎么可能的。所以我想知道..。这是正确的说法吗?如果是的话,这怎么可能?

我的理解是,Git将每个文件的内容存储为Blob,并且每个Blob具有一个全局唯一的标识,该标识来自其内容和大小的SHA散列。然后,Git将文件夹表示为树。任何文件名信息都属于树,而不是Blob,因此文件重命名显示为对树的更改,而不是对Blob的更改。

因此,如果我有一个名为" foo“的文件,其中包含20个函数,而一个名为" bar”的文件中有5个函数,然后我将其中一个函数从foo移到bar(分别为19和6 ),那么Git如何检测到我将该函数从一个文件移动到另一个文件?

据我理解,这将导致两个新的块存在(一个用于修改foo,另一个用于修改后的条形图)。我意识到可以计算一个差异来显示函数从一个文件移动到另一个文件。但是,我不认为函数的历史可能会与bar而不是foo相关联(反正不是自动的)。

如果Git要实际查看单个文件的内部,并计算每个函数的blob (这将是疯狂的/不可行的,因为您必须知道如何解析任何可能的语言),那么我可以看到这是如何可能的。

所以..。这句话对不对?如果它是正确的,那么在我的理解中缺少什么呢?

EN

Stack Overflow用户

发布于 2017-11-09 02:39:00

现在支持开始,使用--color-moved选项检测移动行。它适用于跨文件的移动。

显然,它适用于彩色终端输出。据我所知,没有选择以纯文本补丁格式表示移动,但这是有意义的。

对于默认行为,请尝试

代码语言:javascript
复制
git diff --color-moved

该命令还接受当前的选项,即nodefaultplainzebradimmed_zebra (使用git help diff获取最新选项及其描述)。例如:

代码语言:javascript
复制
git diff --color-moved=zebra

至于它是如何完成的,您可以从此电子邮件交换由该功能的作者获得一些理解。

票数 21
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4908336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档