我有一些文件需要查找,但是不确定它们被放在哪个分支中。我想列出给定目录下所有分支的所有文件。
我的问题是,在git中,是否有一种方法可以列出跨所有分支的目录中的所有文件?
我有一些文件需要查找,但是不确定它们被放在哪个分支中。我想列出给定目录下所有分支的所有文件。
我的问题是,在git中,是否有一种方法可以列出跨所有分支的目录中的所有文件?
git ls-tree
的输出写入到一个文件中。$ for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do
git ls-tree -r --name-only $branch <directory> >> file-list ;
done
您可以通过以下方式获取唯一的文件:
sort -u file-list
git ls-tree -r
命令递归列出特定 treeish 的所有文件。结合 git for-each-ref
枚举分支和一些 shell 过滤器。for i in $(git for-each-ref '--format=%(refname)' 'refs/heads/*') ; do
echo $i
git ls-tree -r $i | awk '$4 ~ /filename-pattern/ {print $4}'
echo
done
将filename-pattern
替换为能够匹配您所需文件的正则表达式。记得转义路径中的斜杠。
$i:path/to/it
,我不确定,但我认为 OP 只想要一个目录,即不使用-r
。 - jthill感谢https://stackoverflow.com/users/1587370/pratz的帮助。
有时候在报告中也包含分支名称会很有用。
for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do
git ls-tree -r --name-only $branch . |xargs -L 1 echo \#$branch:
done
git-ls-files
文档来看,我们仍然需要从所有分支中检出文件夹的内容。因此,直接的方法是:1)获取分支列表;2)对于每个分支,检出文件夹并在其上执行git-ls-files。 - raina77owgit log --pretty=format: --name-only --diff-filter=A | sort -u
吗?这些可能会对你有所帮助:https://dev59.com/x3RB5IYBdhLWcg3wtZIV#543426 和 http://superuser.com/a/429694 - Bharadwaj Srigiriraju