Git 在提交中列出特定目录下的文件
我正在编写一个脚本,用于从myDir目录下的提交中检索文件,但无法使其正常工作以下是脚本: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
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
的主页上说,它只适用于索引和工作树中的文件。它不接受提交参数。