Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在提交中列出特定目录下的文件_Git_Shell - Fatal编程技术网

Git 在提交中列出特定目录下的文件

Git 在提交中列出特定目录下的文件,git,shell,Git,Shell,我正在编写一个脚本,用于从myDir目录下的提交中检索文件,但无法使其正常工作以下是脚本: echo "************* $commit ****************** " list_files = `git diff-tree --no-commit-id --name-only -r $commit | grep myDir` for file in $list_files do

我正在编写一个脚本,用于从myDir目录下的提交中检索文件,但无法使其正常工作以下是脚本:

echo "************* $commit ******************      "
        list_files = `git diff-tree --no-commit-id --name-only -r $commit | grep myDir`
        for file in $list_files
            do
                echo "File name is : $file "
        done
我总是在列表文件中看到一个错误,上面说:

列表文件:未找到命令


删除之前和之后的空格=

list_files = `git diff-tree
应该是

list_files=`git diff-tree.....`

比如说,如果
x=10
作为
x=10
给出,那么shell将认为
x
是一个用两个参数调用的命令。由于没有名为
x
的此类命令,因此它会给出找不到的错误命令。

删除前后的空格=

list_files = `git diff-tree
应该是

list_files=`git diff-tree.....`

比如说,如果
x=10
作为
x=10
给出,那么shell将认为
x
是一个用两个参数调用的命令。由于没有名为
x
的此类命令,因此它会给出找不到的错误命令。

您的方法太复杂了。试一试

git ls-files $commit myDir | while read f; do
  echo "file name is $f"
done
改善措施包括:

  • 一个更简单的Git命令,专门用于在指定的前缀下列出指定提交中的文件
  • 您可以在该命令输出文件时处理该命令输出的文件- 而不是将所有输出保存为一个巨大的字符串,然后再次拆分它

    • 你的方法太复杂了。试一试

      git ls-files $commit myDir | while read f; do
        echo "file name is $f"
      done
      
      改善措施包括:

      • 一个更简单的Git命令,专门用于在指定的前缀下列出指定提交中的文件
      • 您可以在该命令输出文件时处理该命令输出的文件- 而不是将所有输出保存为一个巨大的字符串,然后再次拆分它
      当使用您的命令(
      diff tree
      )时,
      HEAD
      是具有
      d/a
      d/b
      的提交,在具有
      d/a
      d/b
      d/c
      的提交中列出
      d
      的内容,您的命令只给了我
      d/c
      。换句话说,它列出了不在
      HEAD
      目录版本中的文件

      要回答标题问题,此命令将列出给定提交中的文件:

      git ls-tree -r --name-only "$commit" "$directory"
      
      当使用您的命令(
      diff tree
      )而
      HEAD
      是具有
      d/a
      d/b
      的提交,在具有
      d/a
      d/b
      d/c
      的提交中列出
      d
      的内容时,您的命令只给了我
      d/c
      。换句话说,它列出了不在
      HEAD
      目录版本中的文件

      要回答标题问题,此命令将列出给定提交中的文件:

      git ls-tree -r --name-only "$commit" "$directory"
      

      我可以用我的一生,我永远不会注意到:我可以用我的一生,我永远不会注意到:这似乎不起作用。
      ls files
      的主页上说,它只适用于索引和工作树中的文件。它不需要提交参数。这似乎不起作用。
      ls files
      的主页上说,它只适用于索引和工作树中的文件。它不接受提交参数。