我目前正在使用以下两个 bash 函数对我们的 git 存储库进行分块,以确定每个分支上的最新版本号。由于我们有几个 git 钩子(Hook),包括 post-checkout,gitTrackAll
函数可能需要很长时间才能运行。有什么方法可以在不检查每个分支、将其 pull 入、然后运行 git show 的情况下完成我正在做的事情吗?
澄清一下,我目前正在检查每个分支并获取 VERSION 文件的内容。这基本上告诉我 merge 到该分支的最后一个版本是什么。我们偶尔会有一些分支在开发人员处理它们时停滞不前。此列表为我们提供了一种快速查看背后原因的方法。
gitTrackAll && gitBranchVersions
function gitTrackAll(){
remote='origin';
for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD| awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do
git checkout "$brname"
git branch --set-upstream-to $remote/$brname $brname;
git pull
done
git checkout master
}
function gitBranchVersions(){
line='--------------------------------------------------------------------------------'
line="$line$line"
for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do
VER=$(git show "$branch":VERSION);
printf "%s %s $VER\n" $branch "${line:${#branch}}"
done
}
结果输出看起来有点像下面(分支名称已更改)
refs/heads/1954-branch-a ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.27
refs/heads/1955-branch-b ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.43
refs/heads/1965-branch-c ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.32
refs/heads/1968-branch-d ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.101
refs/heads/1969-branch-e ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.114
refs/heads/master ----------------------------------------------------------------------------------------------------------------------------------------------- 2.9.115
最佳答案
我会用下面的方式重写 gitTrackAll
而根本不需要任何检查:
function gitTrackAll(){
remote='origin';
for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD| awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do
git branch --set-upstream-to $remote/$brname $brname;
# git fetch cannot update the current branch - use git pull
git fetch $remote $brname:$brname || git pull $remote $brname
done
}
关于bash - Git 跨分支检查文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50236392/