git 如何列出提交的文件夹中的所有文件?

njthzxwz  于 2023-09-29  发布在  Git
关注(0)|答案(2)|浏览(153)

对于list all the files in a commit,可以用途:

git show --pretty="" --name-only bd61ad98

但是,如果我想进一步缩小列表范围,只显示文件夹中的文件,我应该怎么做?文件不只是在一个文件夹中,而是:

  • 在几个文件夹中?
  • 不在文件夹里
  • 不在几个文件夹里
3mpgtkmj

3mpgtkmj1#

git ls-tree $commit:$path按要求回答了您的问题,但我认为您是在该文件夹中 * 更改 * 的所有文件之后。
git diff-tree -m $commit{~,}:$path,如果需要,可以使用--name-status--name-only,或者如果您希望列出完整路径而不是相对路径名称,则可以使用git diff-tree -m -r $commit{~,} -- $path
对于多个路径,可以运行多个命令,也可以使用分隔形式$commit{~,} -- $path并给予多个路径;要获取除某些路径之外的所有路径,请参阅pathspec文档,可以使用":!$path"

$ git diff-tree -m -r --name-status @~20{~,} -- ':!t' ':!Documentation' 
M       contrib/subtree/git-subtree.sh
M       contrib/subtree/t/t7900-subtree.sh
M       parse-options.c
$ git diff-tree -m -r --name-status @~20{~,} -- # ':!t' ':!Documentation' 
M       Documentation/git-rev-parse.txt
M       contrib/subtree/git-subtree.sh
M       contrib/subtree/t/t7900-subtree.sh
M       parse-options.c
M       t/t0040-parse-options.sh
M       t/t1502-rev-parse-parseopt.sh
A       t/t1502/.gitattributes
A       t/t1502/optionspec-neg
A       t/t1502/optionspec-neg.help
A       t/t1502/optionspec.help
$
sdnqo3pr

sdnqo3pr2#

下面是一个使用awk的解决方案。
在文件夹foo中:

$ folder="foo"
$ git show --pretty="" --name-only bd61ad98 | awk -F'/' -v folder="$folder" '$1 ~ folder'

不在文件夹foo中:

$ folder="foo"
$ git show --pretty="" --name-only bd61ad98 | awk -F'/' -v folder="$folder" '$1 !~ folder'

不在文件夹foobar中:

$ first_folder="foo"
$ second_folder="bar"
$ git show --pretty="" --name-only bd61ad98 | awk -F'/' -v first_folder="$first_folder" -v second_folder="$second_folder" '$1 !~ first_folder && $1 !~ second_folder'

相关问题