gpt4 book ai didi

git - 如何获取包含子模块的 Git 存储库中所有文件的绝对路径?

转载 作者:行者123 更新时间:2023-12-02 03:29:37 24 4
gpt4 key购买 nike

我试图递归地列出所有子模块中的所有未跟踪文件:

git submodule foreach --recursive git ls-files --others --exclude-standard --full-name

但这并没有列出绝对路径,它给出了子模块文件夹的相对路径。

我应该如何修改我的命令?

最佳答案

(注意:这是一个“工具”答案,而不是“解决方案”答案。也就是说,这个答案旨在为您提供构建所需解决方案所需的工具。 )

使用 git rev-parse --show-toplevel 获取当前存储库的绝对路径。当然,在 super 项目中执行此操作。这为您提供了任何路径前缀的第一部分,但现在您需要其余部分。

正如 the git submodule documentation 所说,在 foreach 中,您可以访问多个变量,包括 $path :

$path is the name of the submodule directory relative to the superproject ...

目前还不清楚(您必须自己测试)是 $path 在递归子模块的情况下是否是累积的。也就是说,如果 super 项目 A 在路径 top/subB 下有子模块 B,那么当您位于子模块 B 中时 $path 将是 top/subB 。但是假设子模块 B 充当子模块 C 的 super 项目,B 自己的路径是 contained/C 。当在子模块 C 内时 $path 会是 top/subB/contained/C 还是只是 contained/C1

无论如何,一旦有了适当的前缀,只需使用 sed 之类的东西将其添加到前面,例如:

git ls-files --others --exclude-standard --full-name | sed "s,^,$prefix,"

其中 $prefix 设置为适当的前缀,可能只是 $path/ 。 (这假设您的文件名都不包含嵌入的换行符;如果包含,您的原始命令无论如何都会遇到麻烦。正如所写,它还假设您的前缀都不包含逗号 - 如果包含,请使用 , 以外的字符,或者让 $prefix 用反斜杠引用逗号。)


1逻辑表明这将是完整的路径;如果不知道有多少子模块已被递归到,相对路径并不完全可用。然而,相对路径更容易生成。

关于git - 如何获取包含子模块的 Git 存储库中所有文件的绝对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52183527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com