我正在使用msysgit(1.7.9),我正在寻找git ls-files
命令的正确调用,以显示当前级别的(跟踪的)文件和目录,或者来自索引,或者当前的工作目录,如果这更容易。
基本上它会给出一个类似于你在Github上看到的目录列表。来自Windows,我不太熟悉正确的方法(?)。
答案 0 :(得分:18)
我想你想要git ls-tree HEAD
品尝。对于目录,ls-tree输出的第二个字是tree
,对于文件是blob
,对于子模块是commit
,文件名是ascii选项卡之后的所有内容
答案 1 :(得分:14)
我相信git ls-tree --name-only [branch]
会做你想要的。
答案 2 :(得分:5)
git ls-tree <tree-ish>
很好,但我无法弄清楚如何将 索引 指定为<tree-ish>
。 (虽然我确信必须有一些全部大写的参考才能做到这一点。)
无论如何,ls-files
隐式地对索引起作用,所以我不妨使用它:
$ git ls-files | cut -d/ -f1 | uniq
仅显示当前目录中的文件和目录。
更改cut
的{{1}}参数以控制深度。例如,-f
(破折号两个)显示最多两层的文件和目录:
-f-2
如果您为$ git ls-files | cut -d/ -f-2 | uniq
指定<path>
参数,请务必增加ls-files
以容纳主要目录:
-f
答案 3 :(得分:4)
要仅列出当前工作目录中由git跟踪的文件,我发现以下内容比使用git ls-tree...
快几倍:
ls | grep -f <(git ls-files)
如果您还想要包含目录,那将需要一些麻烦的事情,如下所示:
ls | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq)
假设你没有任何&#39; /&#39;文件名中的字符。以及......
ls -a | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq)
为了也列出&#34;隐形&#34; (尚未跟踪)文件。
答案 4 :(得分:1)
我很惊讶这太难了......但是不要让我开始关注git。
jthill答案的变体似乎是别人的(嘿,我是语言学家,我有许可证新词)。变体是
ls -d `git ls-tree HEAD | sed -e "s/^.*\t//"`
这使用'ls'来格式化输出,因此您可以获得颜色编码(如果您使用它),等等。它也可以作为别名:
alias gitls='ls -d `git ls-tree HEAD | sed -e "s/^.*\t//"`'
FWIW,您也可以为递归命令设置别名,以便您使用'ls'格式(例如,如果您的路径+文件名不太长,您将获得两个列输出,可执行文件的颜色编码等。 )
alias gitls-r='ls `git ls-files`'
答案 5 :(得分:0)
不管我信不信,我发现的最简单的解决方案是简单地cd
进入终端中所需的目录。在git ls-files
中运行/project/src
只会使您从该目录获得结果,而在/project
中运行它
不是最技术性的答案,但嘿,它可行!
答案 6 :(得分:0)
使用此simple bash script定义任何级别的子目录