相关疑难解决方法(0)

Git能否真正跟踪单个函数从1个文件到另一个文件的移动?如果是这样,怎么样?

有几次,我遇到过这样的说法:如果你将一个函数从一个文件移动到另一个文件,Git可以跟踪它.例如,这个条目说,"Linus说,如果你将一个函数从一个文件移动到另一个文件,Git会告诉你整个移动过程中单个函数的历史."

但我对Git的一些引擎盖设计有一点了解,我不知道这是怎么回事.所以我想知道......这是正确的陈述吗?如果是这样,这怎么可能?

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

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

根据我的理解,这将导致2个新的blob存在(一个用于修改的foo,一个用于修改的条).我意识到可以计算diff以显示函数从一个文件移动到另一个文件.但是我没有看到关于函数的历史如何可能与bar而不是foo相关联(反正不是自动的).

如果Git的是真正看里面单个的文件,并计算每个函数BLOB(这将是疯狂的/不可行的,因为你必须知道如何解析任何可能的语言),那么我可以看到这是可能的.

所以...声明是否正确?如果它是正确的,那么我理解中缺少什么?

git git-diff git-log

66
推荐指数
4
解决办法
8415
查看次数

获取已使用git-svn重命名的SVN仓库的完整历史记录

我有一个SVN存储库,从"Project"重命名为"Project v1".

然后我做了一个git svn clone创建重命名的SVN文件夹的git版本.

当我git log新创建的git存储库时,我只看到一个历史项.这是我在重命名文件夹时给SVN存储库提交的提交消息.

有没有办法让git存储库在重命名文件夹之前拥有所有SVN历史记录(或者在该文件夹之前的任何其他可能的重命名)?

git git-svn

8
推荐指数
1
解决办法
3203
查看次数

标签 统计

git ×2

git-diff ×1

git-log ×1

git-svn ×1