如何仅为一个目录级别设置“git ls files”。
我使用的是msysgit(1.7.9),我正在寻找正确调用如何仅为一个目录级别设置“git ls files”。,git,ls,glob,Git,Ls,Glob,我使用的是msysgit(1.7.9),我正在寻找正确调用gitls files命令,以显示当前级别的(跟踪的)文件和目录,可以是索引,也可以是当前工作目录(如果更容易的话) 本质上,它将提供一个目录列表,类似于您在Github上看到的目录列表。来自Windows,我不太熟悉进行全局搜索的正确方法(?) 我相信git-ls-tree——只有名字的[branch]能满足你的需求。我想你想要git-ls-tree-HEAD尝一尝。ls-tree输出的第二个字将是tree对于目录,blob对于文件,c
gitls files
命令,以显示当前级别的(跟踪的)文件和目录,可以是索引,也可以是当前工作目录(如果更容易的话)
本质上,它将提供一个目录列表,类似于您在Github上看到的目录列表。来自Windows,我不太熟悉进行全局搜索的正确方法(?) 我相信
git-ls-tree——只有名字的[branch]
能满足你的需求。我想你想要git-ls-tree-HEAD
尝一尝。ls-tree输出的第二个字将是tree
对于目录,blob
对于文件,commit
对于子模块,文件名是ascii选项卡之后的所有内容
编辑:根据问题进行调整,以更好地适应问题
git ls-files . | sed s,/.*,/, | uniq
将列出从当前级别开始的索引文件,并将目录折叠到其第一个组件。要仅列出当前工作目录中由git跟踪的文件,我发现以下操作比使用git ls tree快几倍…:
ls | grep -f <(git ls-files)
ls | grep-fgitls-tree
很好,但我不知道如何将索引指定为
。(尽管我确信一定会有一些“全大写”的引用来做到这一点。)
无论如何,ls文件
隐式地作用于索引,因此我不妨使用它:
$git ls文件| cut-d/-f1 | uniq
这仅显示当前目录中的文件和目录
将cut
的-f
参数更改为控制深度。例如,-f-2
(即破折号2)显示的文件和目录有两层深度:
$ git ls-files | cut -d/ -f-2 | uniq
如果将
参数指定给ls files
,请确保增加-f
,以适应前导目录:
$ git ls-files foo/bar | cut -d/ -f-3 | uniq
我很惊讶这这么难。。。但别让我开始抱怨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,您还可以将recursive命令别名,以便使用“ls”格式(例如,如果您的路径+文件名不太长,您将获得两列输出、可执行文件的颜色编码等)
信不信由你,我找到的最简单的解决方案就是将cd
放入终端中所需的目录中。在/project/src
中运行git ls文件
将只从该目录中获得结果,而不是在/project
中运行它
这不是最技术性的答案,但是,嘿,这很有效 任何级别的define子目录都可以使用它谢谢,这是95%的方法。您的git ls树--name only[branch]
列出了同一列表中的目录和文件(即,对于目录,没有尾随的/
)。我发现gitls tree-d--name only[branch]
只列出目录。“问题”的一部分是发现子模块目录。这可能是公认的答案!或者说这是一个很好的开始D@PhilipOakley我试图做类似的事情,除了使用gitls文件
而不是gitls树
。对于git ls files
,它的等效选项似乎是--directory
(在该命令中,-d
是--deleted
的缩写)。这很好。。。我想知道为什么我不能将其添加为[别名]
ls tracked=“!f(){ls | grep-fgit ls files | awk-f/'{print$1}”“|uniq | xargs ls-dl--color=auto
@iegik这更好。我想用sed s、/.*、
代替awk,因为它比较短。请回答这个问题吧?我会赏金的。在macOS上不起作用--ls:非法选项--
。我想,至少在macOS上,。| xargs'ls'-Gdl
-其他人可以使用它检查这是否也适用于Linux?另外,如何将其设置为git别名?非shell别名似乎不支持管道,但shell别名在存储库根目录下运行,而不是在当前目录下运行(git config--global alias.ls”\!git ls files | awk-F/'{print$1}'| uniq | xargs'ls'-Gdl“
是一个开始,但是…)您可以使用.Smart-trick通过“ls”着色来获取索引树。我个人更喜欢“ls-ld”,但这就是我。您可以使用--name(可能是新的)来代替通过sed进行管道传输flag.@Uri:right,--name only更简单,谢谢!使用-ld肯定比上面的一些方法更简单,可以获取完整信息。有关使用--name only
的别名,请参阅
alias gitls='ls -d `git ls-tree HEAD | sed -e "s/^.*\t//"`'
alias gitls-r='ls `git ls-files`'