首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过git存储库中的前向提交跟踪文件?

如何通过git存储库中的前向提交跟踪文件?
EN

Stack Overflow用户
提问于 2021-08-05 17:25:51
回答 1查看 80关注 0票数 0

假设我们在某个提交C中有一个文件F,给定未来的提交C',从F导出C‘中的文件列表的最佳方法是什么?

在文件从一个提交到另一个提交的过程中,可以按任意顺序修改、重命名、移动、复制、删除、拆分和合并文件。

我想确定通过这样的操作从原始文件中“派生”的文件的最终列表(可以是空的),最好使用git的管道命令。

是的,没有办法可靠地说一个文件是否被分割、合并、移动或复制。但是,在git日志或git-指责中用于相同目的的算法应该是可以的。(谢谢@SpaceKatt)。

TL;DR I需要一个函数,在输入的情况下产生以下输出:

代码语言:javascript
复制
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-loggit-blame导出一个解决方案,尽管我也不知道有一个完美的解决方案(不涉及瓷器)。

EN

回答 1

Stack Overflow用户

发布于 2021-08-05 18:20:05

简单地说,Git只能向后走,而不能向前走(如matt noted)。

解决这个问题的方法很简单:向后走。假设您有一个分支名BR,它标识了一些最终提交:

代码语言:javascript
复制
... <-F <-G <-H ... <-Z   <--BR

你希望“从G中前进”。首先,从Z开始,列出每一次向后提交:

代码语言:javascript
复制
git rev-list BR

当您到达提交G时,停止。拿出您刚刚生成的散列ID列表,现在您可以一次只对处理它们:

代码语言:javascript
复制
(H, G)
(I, H)
(...)
(Z, Y)

请注意,git blame --reverse已经“知道如何做到这一点”,但它仍然需要两个端点,也就是说,假设您想要前进到Z,就必须定位Z。但是您必须自己选择文件名,这就是问题所在。(您可以自动地对Z中的每个文件运行一次;这会很慢。)这一点没有很好的答案,至少今天没有。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68671049

复制
相关文章

相似问题

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