【问题标题】:git ls-files for different branchgit ls-files 用于不同的分支
【发布时间】:2019-08-27 22:42:09
【问题描述】:

我想在指定分支的基目录中查找所有降价文件。 git ls-files 是向我建议的,但文档没有提到指定分支。我希望能够在不检查该分支的情况下做到这一点。这个可以吗?

【问题讨论】:

  • 我没有看到基于文件扩展名进行过滤的方法。 git ls-files *.md' showed me all markdown files in the current branch, and git ls-tree --name-only origin/master` 显示了origin/master 中的所有文件。我是否必须过滤自己,或者是否有可以使用的标志?

标签: git git-ls-files


【解决方案1】:

git ls-files 检查 indexwork-tree(或两者)中的文件。由于当前索引和工作树内容通常反映从当前分支的尖端提取的当前提交,因此它不会以这种方式工作。但是有一个解决方法。

作为VonC notesgit ls-tree 检查 对象,例如存储在提交中的对象。但是,git ls-tree 不接受路径规范参数,例如 **/*.md

解决方法是将感兴趣的提交读入 临时 索引。要干净地做到这一点,请使用 mktemp 创建一个临时文件,然后删除临时文件并使用 git read-tree 重新创建该文件作为包含您要检查的提交图像的有效临时索引,您可以然后使用git ls-files 进行检查。例如:

$ cd git
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree e83c5163316f89bfbde7d9ab23ca2e25604af290; git ls-files -- "*.h" "**/*.h"; rm $GIT_INDEX_FILE'
cache.h
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree origin/master; git ls-files -- "*.md"; rm $GIT_INDEX_FILE'
.github/CONTRIBUTING.md
.github/PULL_REQUEST_TEMPLATE.md
README.md
contrib/vscode/README.md

【讨论】:

    【解决方案2】:

    如果您使用 git ls-tree,您可能需要自己过滤输出,以 grep 您需要的内容。

    正如在 2012 年提到的 in this thread

    “模式”有两种用法,前者可能还可以,但是 后者确实具有误导性。

    在我们编写此命令时,有两个不同的“pathspec”系列,ls-tree 属于带有“diff”系列的那个,没有只采用“主要路径”模式”(“ls-files”和“grep”系列中的另一个允许通配符)。从未支持为“ls-tree/diff”系列中的命令提供通配符。

    如果您更改 ls-tree 以使用其路径参数作为路径规范,您将 打破向后兼容性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-26
      • 2020-08-06
      • 2021-08-20
      • 2014-11-12
      • 2020-01-03
      • 2021-06-19
      • 2019-06-13
      • 2015-03-25
      相关资源
      最近更新 更多