我想比较 git 存储库中的两个文件,并判断哪个文件较早被引入存储库(按祖先,而不是时间戳)。最简单的做法是找到引入文件的单个提交 ( rev-list HEAD -- <filename> | tail -n 1
),并查询它们之间是否有提交 ( rev-list commit1 ^commit2
)。然而,这是缓慢而愚蠢的。在我们找到一棵包含一个文件但不包含另一个文件的树之前,将历史一分为二呢?
问问题
55 次
3 回答
1
除非文件在同一线性分支中引入(即,一个在另一个的祖先中),否则无法知道。假设你在你的仓库中引入了文件 A,我在我的仓库中引入了文件 B。如果稍后我从您的回购中克隆,则无法知道哪个先出现。当然,我们可以同步时钟,但这在 git 之外。git的“时间”的唯一概念是祖先关系,其他的只是没有可比性。
于 2013-03-19T20:10:37.953 回答
0
根据我对您的了解,这可能是您正在寻找的:
git log --topo-order --reverse --oneline --name-only --pretty=format:"%Cgreen%ci %Cblue%cr %Cred%cn %Cgreen%h %Creset" <file1> <file2> | head -n10
--topo-order
在显示其所有子代之前不显示父代,并避免在混合的多行历史记录中显示提交。--reverse
以相反的顺序输出提交。
有关更多选项和可能的组合,请参阅:git-log 。
于 2013-03-19T03:50:56.380 回答
0
使用 diff-filter=A
git log --reverse --format=%H --name-status --diff-filter=A -- file1 file2 | grep ^A | cut -f2
对于任意数量的文件,您将在一次遍历中获得所需的排序。
于 2013-05-26T09:12:21.570 回答