如何只为一个目录级别`git ls-files`.

Phi*_*ley 18 git ls glob

我正在使用msysgit(1.7.9),我正在寻找正确的git ls-files命令调用,以显示当前级别的(跟踪的)文件和目录,无论是从索引还是当前工作目录,如果这是更轻松.

基本上它会给出一个类似于你在Github上看到的目录列表.来自Windows,我不太熟悉正确的方法(?).

jth*_*ill 18

我想你想git ls-tree HEAD品尝一下.ls-tree输出的第二个字是tree用于目录,blob用于文件,commit用于子模块,文件名是ascii选项卡之后的所有内容

  • `git ls-files | awk -F /'{print $ 1}'| uniq | xargs ls -dl --color = auto` (2认同)

Dav*_*ain 14

我相信git ls-tree --name-only [branch]会做你想要的.

  • 谢谢,95%就这样了。您的“git ls-tree --name-only [branch]”列出了同一列表中的目录和文件(即目录没有尾随“/”)。我发现 `git ls-tree -d --name-only [branch]` 将仅列出目录。“问题”的一部分是发现子模块目录。 (3认同)

小智 5

只列出当前工作目录中由 git 跟踪的文件,我发现以下比使用快几倍git ls-tree...

ls | grep -f <(git ls-files)
Run Code Online (Sandbox Code Playgroud)

如果您还想包含目录,则需要对 sed 进行一些处理,例如:

ls | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq)  
Run Code Online (Sandbox Code Playgroud)

假设您的文件名中没有任何“/”字符。也...

ls -a | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq)

为了还列出“不可见”(尚未跟踪)的文件。


ant*_*tak 5

git ls-tree <tree-ish>是好的,所有的,但我无法弄清楚如何指定索引<tree-ish>.(虽然我确定必须有一些全部大写的参考才能做到这一点.)

无论如何,ls-files隐式地对索引起作用所以我不妨使用它:

$ git ls-files | cut -d/ -f1 | uniq
Run Code Online (Sandbox Code Playgroud)

这仅显示当前目录中的文件和目录.

改变控制深度cut-f论点.例如,-f-2(那是破折号 2)显示最多两级的文件和目录:

$ git ls-files | cut -d/ -f-2 | uniq
Run Code Online (Sandbox Code Playgroud)

如果指定<path>参数ls-files,请确保增加-f以适应前导目录:

$ git ls-files foo/bar | cut -d/ -f-3 | uniq
Run Code Online (Sandbox Code Playgroud)