我一直在试图找出如何获取git repo中所有文件的列表,包括子模块中包含的文件.目前,git ls-files将提供顶级子模块目录,但不提供子模块中包含的文件.在进一步调查中,我发现使用git submodule,你可以递归地找到所有的子模块然后去git ls-files使用:
git submodule --quiet foreach --recursive "git ls-files"
Run Code Online (Sandbox Code Playgroud)
唯一的问题是结果是来自子模块的路径,但我需要来自repo的完整路径.所以对于以下内容
例如/ some/path/to/gitrepo/source/submodule/[file1,file2]
我看到的是:
file1
file2
Run Code Online (Sandbox Code Playgroud)
我想看到的是:
source/submodule/file1
source/submodule/file2
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?从文档中,有一些预定义的变量($ name,$ path,$ sha1和$ toplevel),但我不知道如何使用它们来获得所需的结果.
使用Git 2.11 +可以实现另一种方法(2016年第4季度)
git ls-files --recurse-submodules
Run Code Online (Sandbox Code Playgroud)
请参阅Brandon Williams()提交75a6315,提交07c01b9,提交e77aa33,提交74866d7(2016年10月7日).(由Junio C Hamano合并- -在提交1c2b1f7,2016年10月26日)mbrandonw
gitster
ls-files:可选择递归到子模块"
git ls-files"learn"--recurse-submodules"选项可用于获取跨子模块的跟踪文件列表(即,这仅适用于"--cached"选项,不适用于列出未跟踪或忽略的文件).这将是一个有用的工具,可以坐在管道的上游端,使用xargs读取该管道,以处理来自顶级超级项目的所有工作树文件.
如此测试所示,输出将包括文件的完整路径,从主父repo开始.
该git ls-files文档现在包括:
--recurse-submodules
Run Code Online (Sandbox Code Playgroud)
递归调用存储库中每个子模块上的ls-files.
目前只支持--cached模式.
Git 2.13(2017年第二季度)增加了ls-files --recurse-submodules稳健性:
请参阅Jacob Keller()提交2cfe66a,提交2e5d650(2017年4月13日).(由Junio C Hamano合并- -在提交2d646e3,2017年4月24日)jacob-keller
gitster
ls-files:修复recurse-submodules嵌套的子模块由于提交e77aa33("ls-files:可选地递归到子模块",2016-10-07,git 2.11)
ls-files已经知道如何在显示文件时递归到子模块.不幸的是,这在某些情况下失败,包括嵌套多个子模块,从子模块本身具有子模块调用,或者
GIT_DIR设置environemnt变量时.在提交b58a68c("
setup:允许将前缀传递给git命令",2017-03-17,git 2.13-rc0)之前,这会导致错误,表明--prefix并且--super-prefix不兼容.相反,在此提交之后,进程将永远循环,并
GIT_DIR设置为父级,并不断读取父子模块文件并永久递归.通过在设置子进程时为子模块正确准备环境来解决此问题.这类似于grep等其他命令的行为.
看一下git submodule文档,里面说:
foreach评估每个签出子模块中的任意 shell 命令。该命令可以访问变量
$name、和$path:是.gitmodules 中相关子模块部分的名称,是相对于超级项目的子模块目录的名称,是超级项目中记录的提交,是绝对路径超级项目的顶层。$sha1$toplevel$name$path$sha1$toplevel
鉴于上述信息,您可以执行以下操作:
git submodule foreach 'git ls-files | sed "s|^|$path/|"'
Run Code Online (Sandbox Code Playgroud)
git ls-files在此示例中,我们只是从子模块中获取输出,并使用sed前缀 的值$path,该值是子模块相对于父项目顶级目录的路径。
| 归档时间: |
|
| 查看次数: |
1521 次 |
| 最近记录: |