在 Git 中的特定提交中检索文件的路径
Retrieve a path of a file in specific commit in Git
我有一个来自 git 存储库的提交 ID 和文件名列表。我需要的是根据提交 ID 获取列表中每个文件的文件路径。但我不知道如何使用 git 命令来做到这一点。
假设我有一个提交 ID 和文件名:[cb85815bc1, GuiCommonElements.java]
。
现在我需要该提交 ID 中文件的完整路径。所以,输出应该像 path/path/path/GuiCommonElements.java
.
我尝试了很多命令,但没有给我这样的结果。
git show cb85815bc1 --grep='GuiCommonElements.java'
git log cb85815bc1 --grep='GuiCommonElements.java' --name-only
如有任何帮助,我们将不胜感激。
git show
(或git log -p
,它做的事情非常相似,但对不止一次提交进行操作)将 diff 提交与其父(s) ).添加 --name-only
将差异输出减少为仅显示 changed-file-names,而不是 changed-file-names 加上 instruction-set.
您在这里可能想要的是使用 git ls-tree
,它显示提交中包含的文件的名称。如果您不在存储库的顶层,git ls-tree
默认只显示当前目录中的内容,因此您可能需要添加 -r --full-tree
。然后您想要查找包含或以您选择的名称结尾的内容:
git ls-tree -r --full-tree cb85815bc1 | grep GuiCommonElements.java
这是一个小缺陷,因为 grep
本身接受正则表达式参数并显示匹配的行,所以它不仅会显示像这样的文件:
lib/old/GuiCommonElements.java
lib/new/GuiCommonElements.java
还有:
other/ThisIsNotGuiCommonElements.java
(因为 包含 GuiCommonElements.java
)和:
other/GuiCommonElementsXJava
(因为.
匹配任意一个字符,包括X
)。不过应该已经够好了,如果你喜欢,可以稍微支撑一下。
git ls-tree
documentation 声称它采用 <path>...
个参数 "patterns to match",但 glob 模式似乎在这里不起作用:如果 glob 有效,'**/GuiCommonElements.java'
会做trick,但是在我刚才的测试中他们没有。
我有一个来自 git 存储库的提交 ID 和文件名列表。我需要的是根据提交 ID 获取列表中每个文件的文件路径。但我不知道如何使用 git 命令来做到这一点。
假设我有一个提交 ID 和文件名:[cb85815bc1, GuiCommonElements.java]
。
现在我需要该提交 ID 中文件的完整路径。所以,输出应该像 path/path/path/GuiCommonElements.java
.
我尝试了很多命令,但没有给我这样的结果。
git show cb85815bc1 --grep='GuiCommonElements.java'
git log cb85815bc1 --grep='GuiCommonElements.java' --name-only
如有任何帮助,我们将不胜感激。
git show
(或git log -p
,它做的事情非常相似,但对不止一次提交进行操作)将 diff 提交与其父(s) ).添加 --name-only
将差异输出减少为仅显示 changed-file-names,而不是 changed-file-names 加上 instruction-set.
您在这里可能想要的是使用 git ls-tree
,它显示提交中包含的文件的名称。如果您不在存储库的顶层,git ls-tree
默认只显示当前目录中的内容,因此您可能需要添加 -r --full-tree
。然后您想要查找包含或以您选择的名称结尾的内容:
git ls-tree -r --full-tree cb85815bc1 | grep GuiCommonElements.java
这是一个小缺陷,因为 grep
本身接受正则表达式参数并显示匹配的行,所以它不仅会显示像这样的文件:
lib/old/GuiCommonElements.java
lib/new/GuiCommonElements.java
还有:
other/ThisIsNotGuiCommonElements.java
(因为 包含 GuiCommonElements.java
)和:
other/GuiCommonElementsXJava
(因为.
匹配任意一个字符,包括X
)。不过应该已经够好了,如果你喜欢,可以稍微支撑一下。
git ls-tree
documentation 声称它采用 <path>...
个参数 "patterns to match",但 glob 模式似乎在这里不起作用:如果 glob 有效,'**/GuiCommonElements.java'
会做trick,但是在我刚才的测试中他们没有。