如何为所有(包括嵌套的)子模块显示--name-only的差异? [英] How to show a diff with --name-only for all (including nested) submodules?
本文介绍了如何为所有(包括嵌套的)子模块显示--name-only的差异?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道如何从子模块中脱颖而出
git diff "$@"
然而,此差异仅显示超级项目的文件内容,而不显示子模块的文件内容。它显示每个新提交的子模块的新SHA1,但不显示它们的文件内容。
我知道如何做得更详细
git diff --submodule=diff "$@"
但是,此差异显示超级项目及其子模块的所有文件内容
如果不使用--仅限名称的样式,我如何才能做到这一点?
git diff --name-only "$@"
和
git diff --name-only --submodule=diff "$@"
得出相同的结果
注意:我的命令不起作用的一个明显原因是缺乏实现。然而,Git子模块Foreach也有一些技巧,但这似乎不是笔直向前
注意:它应该是递归的(也就是比较子模块的子模块),如果你的解决方案包括‘git子模块Foreach’,那么它将是‘git子模块--递归Foreach’。这是问题最重要的部分,因为创建一个Git子模块Foreach并不难,但Git子模块--递归Foreach让我头疼推荐答案
#! /bin/sh
# See the discussion at https://stackoverflow.com/q/67724347/7976758
if [ -z "$1" ]; then
echo "Usage $0 from_commit [to_commit]"
exit 1
fi
if [ -z "$prog_dir" -o -z "$prog_name" ]; then
start_dir="`pwd`"
prog_dir="`dirname "$0"`"
prog_name="`basename "$0"`"
cd "$prog_dir"
# Get full path
prog_dir="`pwd`"
cd "$start_dir"
export prog_dir prog_name
fi
from_commit="$1"
to_commit="${2:-HEAD}"
export from_commit to_commit
# In the superproject
git --no-pager diff --name-only "$from_commit" "$to_commit"
git submodule foreach '
# In submodule "$name"
prev_commit=`(git -C "$toplevel" ls-tree "$from_commit" "$sm_path" | awk "{print \$3}")`
curr_commit=`(git -C "$toplevel" ls-tree "$to_commit" "$sm_path" | awk "{print \$3}")`
"$prog_dir/$prog_name" $prev_commit $curr_commit
'
这篇关于如何为所有(包括嵌套的)子模块显示--name-only的差异?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文