gpt4 book ai didi

所有 repo 的 Git 状态

转载 作者:太空狗 更新时间:2023-10-29 13:11:06 27 4
gpt4 key购买 nike

哪些工具(如果有的话)可用于显示我的 git 存储库的状态,以及它们相对于它们的远程仓库向前/落后多少?我想象这样的事情存在:

repo1 +2 <--> remote1
repo1 <--> remote1 +3
repo2 <--> remote +10

第一行显示 repo1 领先 2 次提交,第二行显示 remote2 领先 3 次提交,第三行仅显示 repo2 的 remote 领先 10 次提交。

最佳答案

我不完全确定说一个 repo 领先于或落后于另一个 repo 是什么意思。它们只是集合,没有任何引用,就没有顺序。您可以说本地存储库已提交而远程存储库没有。但是不说分支就不能说是超前还是落后。不过,您也许可以说 repo 协议(protocol)是否是最新的。

此外,当与远程通信时,本地 git 客户端不知道本地分支提示和远程分支提示之间有多少提交。在数据传输到本地之前,它不会知道这一点。

你可以做的是运行 git fetch --all,并有一个像这样的脚本(我在本地称它为 `git-repo-status):

#!/bin/bash

# Taken from http://stackoverflow.com/questions/620650/can-i-easily-update-all-local-git-branches-from-remote-branches-simultaneously/answer-9076361
# tweaked by me to help give status of local versus upstream branches.
main() {
REMOTES="$@";
if [ -z "$REMOTES" ]; then
REMOTES=$(git remote);
fi
REMOTES=$(echo "$REMOTES" | xargs -n1 echo)
echo "$REMOTES" | while read REMOTE; do
git remote show $REMOTE -n \
| awk '/merges with remote/{print $5" "$1}' \
| while read line; do
RB=$(echo "$line"|cut -f1 -d" ");
ARB="refs/remotes/$REMOTE/$RB";
LB=$(echo "$line"|cut -f2 -d" ");
ALB="refs/heads/$LB";

# This is in reference to the local branch.
NBEHIND=$(( $(git rev-list --count $ALB..$ARB 2>/dev/null) +0));
NAHEAD=$(( $(git rev-list --count $ARB..$ALB 2>/dev/null) +0));

if [ "$NBEHIND" -gt 0 -a "$NAHEAD" -gt 0 ]; then
echo "$LB <--> $REMOTE/$RB: -$NBEHIND +$NAHEAD";
elif [ "$NBEHIND" -gt 0 ]; then
echo "$LB <--> $REMOTE/$RB: -$NBEHIND";
elif [ "$NAHEAD" -gt 0 ]; then
echo "$LB <--> $REMOTE/$RB: +$NAHEAD";
fi
done
done
}

main $@

运行它会产生如下内容:

:: git repo-status
master <--> upstream/master: -14

我知道这不是您问题的直接答案,但我认为如果不运行 git fetch --all 并从上游获取修订版,您将无法实现您想要的结果。如果您愿意这样做,那么以上内容可能对您有用。

关于所有 repo 的 Git 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18757843/

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