1

假设我们需要获取branchA和中存在的文件列表branchB

简单的解决方案是为每个分支获取两个单独的文件列表,然后将它们与bash或其他东西相交:

# pseudocode
let α = git ls-tree -r --name-only branchA
let β = git ls-tree -r --name-only branchB
intersect α β

似乎ls-tree命令在这里不是排他的方法。有没有办法只通过 git 得到答案?

4

1 回答 1

0

也许是这样的(假设是一个bash外壳):

comm -12 <(git ls-tree -r --name-only branchA | sort) <(git ls-tree -r --name-only branchB | sort)

如果您没有bash,或者您bash的年龄足够大,不支持这种形式的流程替代,您可以将输出保存到临时文件中:

git ls-tree -r --name-only branchA | sort > /tmp/file1
git ls-tree -r --name-only branchB | sort > /tmp/file2
comm -12 /tmp/file1 /tmp/file2
rm /tmp/file1 /tmp/file2

我不认为你可以单独使用你想要的东西git,因为任何形式git diff都会查看文件的内容以及名称,而且看起来你只想要一个通用名称列表,无论是否内容相同与否..

于 2014-01-06T15:04:44.843 回答