Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查特定文件是在哪个git标记版本中引入的?_Git_Git Tag - Fatal编程技术网

如何检查特定文件是在哪个git标记版本中引入的?

如何检查特定文件是在哪个git标记版本中引入的?,git,git-tag,Git,Git Tag,我有一堆文件,我想知道它们是在哪个版本中引入的。散装的。发行版用git标记 快速检查多个(~10)标记中存在大量(~80)个文件的最简单方法是什么 我可以编写一些自定义代码,将每个标记签出到一个目录,查找文件系统中存在的文件,等等 有没有更快、更“吉特”的方法 将git看作一个图,我想纯粹的实现是将历史跟踪到原始提交,然后转发到包含该提交的标记。但是,除非已经有工具可以这样做,否则这可能是一种比签出标记更复杂的方法。git-tag——包含打印给定提交中“位于或下游”的所有标记。然后只需选择“第一

我有一堆文件,我想知道它们是在哪个版本中引入的。散装的。发行版用git标记

快速检查多个(~10)标记中存在大量(~80)个文件的最简单方法是什么

我可以编写一些自定义代码,将每个标记签出到一个目录,查找文件系统中存在的文件,等等

有没有更快、更“吉特”的方法

将git看作一个图,我想纯粹的实现是将历史跟踪到原始提交,然后转发到包含该提交的标记。但是,除非已经有工具可以这样做,否则这可能是一种比签出标记更复杂的方法。

git-tag——包含打印给定提交中“位于或下游”的所有标记。然后只需选择“第一个”这样的标记(如果你的标签是简单编号的,例如,
v1.7
v1.8
v2.0
那可能很简单,如果它们很复杂,比如
v1.7a
v1.7alpha
v1.7.0
v1.7
1,那么你需要一些其他方法来选择正确的标签,比如最小化图表的“距离”从所有候选标签)

git log--pretty=format:%H--diff filter=A-1--path
打印第一个提交ID,其中给定的
路径是
A
dded(您可能需要<代码> -没有重命名< /COD>,或者可能是特定的<代码> -M<代码>级别和/或<代码> -C>代码>选项,以调整GIT是否可以考虑重新命名或复制的文件,就找到提交而言)。 我认为,把这两个因素结合起来会很快达到目的



1我只是编造了这些,我仍然不知道
v1.7
是在
v1.7.0
之前还是之后,也不知道
v1.7-0
v1.7a
与这两者有什么关系。我“真的”见过这样疯狂的东西之前,通常是售后市场部得到了他们的手,尽管我只是为了举例说明而编造的。

这似乎大部分时间都有效。我还有一个额外的缺点,即支持回购是SVN管理的,他们在发布分支中使用SVN副本复制到主干中的一个文件。对于git来说,这似乎创造了一个完全独立的历史.因此,从trunk的角度来看,该文件从未出现在标记中。但这可能是一个太奇怪的用例,不必担心。这(单独的历史)是有意义的,对于这种情况,您必须做一些更复杂的事情。(另外,我应该注意,
-M
-C
需要修改
--diff过滤器
,并且不将日志限制为一个提交和特定路径,因此它也变得更复杂。)