如何为所有(包括嵌套的)子模块显示--name-only的差异? [英] How to show a diff with --name-only for all (including nested) submodules?

查看:9
本文介绍了如何为所有(包括嵌套的)子模块显示--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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆