gpt4 book ai didi

git - 如何 merge `git diff --name-status` 和 `git diff --stat` 命令的输出?

转载 作者:太空狗 更新时间:2023-10-29 13:50:03 25 4
gpt4 key购买 nike

使用 git diff --name-status 命令,我可以看到具有如下文件状态的文件名称:

M       .bashrc
D .ghc/.ghci.conf.un~
D .ghc/ghci_history
M .life
A .profile
M .spacemacs

使用 git diff --stat 我可以看到行数和文件更改的统计信息:

 .bashrc             |   3 ++-
.ghc/.ghci.conf.un~ | Bin 13912 -> 0 bytes
.ghc/ghci_history | 100 --------------------------------------------------------------------------------------------
.life | 2 ++
.profile | 23 +++++++++++++++++++++
.spacemacs | 3 +++

有什么方法可以 merge 两个命令的输出吗?我想要这样的东西:

M  .bashrc             |   3 ++-
D .ghc/.ghci.conf.un~ | Bin 13912 -> 0 bytes
D .ghc/ghci_history | 100 --------------------------------------------------------------------------------------------
M .life | 2 ++
A .profile | 23 +++++++++++++++++++++
M .spacemacs | 3 +++

当然,我可以通过字符串调用两个命令然后操作字符串来手动完成。但我不确定这些命令的输出有多可靠和一致。也许它记录在某处。您能否提供一个 shell 命令,让我可以从终端看到这些差异?

最佳答案

DIFF=origin/master..HEAD
join -t $'\t' -1 2 -2 1 -o 1.1,2.1,2.2 \
<(git diff --name-status $DIFF | sort -k2)
<(git diff --stat=$((COLUMNS-4)),800 $DIFF | sed -e '$d' -e 's/^ *//;s/ /\t/' | sort) \
| sed 's/\t/ /g'

或者,完全 POSIX 在 ~/.gitconfig[alias] 部分

ndiff = "!f() { TAB=`printf '\t'`; COLUMNS=`stty size|cut -d' ' -f2`; cd $GIT_PREFIX; git diff --name-status $1 | sort -k2 > /tmp/.tmpgitndiff ; git diff --stat=$COLUMNS,800 $1 |sed -e '$d' -e \"s/^ *//;s/ /${TAB}/\" | sort | join -t \"${TAB}\" -1 2 -2 1 -o 1.1,2.1,2.2 /tmp/.tmpgitndiff - | sed \"s/${TAB}/ /g\"; rm -f /tmp/.tmpgitndiff; }; f"
$ git ndiff origin/master..HEAD -- dev/ # example
M dev/main.scss | 9 +
A dev/rs.js | 19 ++

关于git - 如何 merge `git diff --name-status` 和 `git diff --stat` 命令的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51047759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com