【发布时间】:2021-10-10 17:25:58
【问题描述】:
假设我们在某个提交C中有一个文件F。给定未来的提交 C',推断 C' 中从 F 派生的文件列表的最佳方法是什么? p>
在文件从一个提交到另一个提交的过程中,可以按任意顺序多次修改、重命名、移动、复制、删除、拆分和合并。
我想确定通过此类操作从原始文件“派生”的文件的最终列表(可以为空),最好使用 git 的管道命令。
是的,没有办法可靠地确定文件是否被拆分、合并、移动或复制。但是在 git-log 或 git-blame 中用于相同目的的算法应该没问题。 (感谢@SpaceKatt)。
TL;DR我想要一个在给定输入的情况下产生以下输出的函数:
Input: {F, C, C'}
C is an earlier commit.
C' is a later commit (and C is reachable from C')
F is a file in C
Output: {F1', F2', F3', ...}
Fx's are list of files in C' that are derived from F
注意:如果是相反的问题(即查找文件的历史记录),可能会使用git-log 或git-blame 得出解决方案,尽管我不知道完美的解决方案(不涉及瓷器)。
【问题讨论】:
-
好吧,在 Git 中没有“前进”之类的东西。指针仅向后指向。
-
您的意思是文件不能从父级到子级跟踪吗? @马特
-
通常,无法可靠地判断文件是否已被复制、拆分或合并。在某些特殊情况下您可以,但这些是例外 - 不是规则
-
是的,没有完美的方式可以肯定地说。但是对于我的情况来说,与 git-log 或 git-blame 一样可靠的用于复制、拆分、合并检测的解决方案就足够了。 @SpaceKatt
标签: git git-log git-rev-list