在分支NewFeature中,我有一个xml模式更改,我想检查所有单元测试中的所有xml文件是否都已正确修改。
我喜欢在两个分支之间找到所有未修改的文件。像这样
git aresame develop NewFeature -- **/*.xml
答案 0 :(得分:1)
git ls-tree -r develop | grep '\sblob\s' | grep '.xml$' | awk '{print $3,$4}' > foo.txt
git ls-tree -r NewFeature | grep '\sblob\s' | grep '.xml$' | awk '{print $3,$4}' >> foo.txt
sort foo.txt | uniq -d | awk '{print $2}'
git ls-tree -r
打印所有跟踪文件的<mode> SP <type> SP <object> TAB <file>
。
grep '\sblob\s'
不包括trees
和submodules
,而grep '.xml$'
仅包含xml文件。
awk '{print $3,$4}'
忽略mode
的变化,例如从0644
到0755
。如果您担心此类更改,请删除此部分。
sort foo.txt | uniq -d
打印两个分支上的路径和哈希值相同的文件,而awk '{print $2}'
仅打印路径。
答案 1 :(得分:1)
类似于ElpieKay解决方案: (一行,无模式检查)
comm -3 <(git diff --name-only develop..NewFeature | grep '.xml$') <(git ls-tree -r --name-only develop | grep '.xml$')
答案 2 :(得分:1)
根据您的好评,我将几种想法整合到了最终解决方案中
comm -3 -1 <(git diff --name-only develop NewFeature -- **/*.xml|sort) <(git ls-tree develop -r | grep -Ei '\sblob\s.+\.xml$' | cut -f 2 | sort)
说明:
git diff --name-only develop NewFeature -- **/*.xml|sort
按排序顺序列出所有已更改的xml文件git ls-tree develop -r | grep -Ei '\sblob\s.+\.xml$' | cut -f 2 | sort
打印原始开发分支中的所有xml文件comm -3 -1 ...
逐行比较排序的文件,并抑制仅在NewFeature分支(-1)中的行,以及在两个分支中的文件(-3)