bash - Git跨分支检查文件内容
问题描述
我目前正在使用以下两个 bash 函数对我们的 git 存储库进行分块,以确定每个分支上的最新版本号。由于我们有几个 git 钩子,包括 post-checkout,所以该gitTrackAll
函数可能需要很长时间才能运行。有没有办法在不检查每个分支、将其拉入然后运行 git show 的情况下做我正在做的事情?
为了澄清,我目前正在检查每个分支并获取 VERSION 文件的内容。这基本上告诉我合并到该分支的最后一个版本是什么。我们偶尔会有一些分支在开发人员处理它们时停滞不前。此列表为我们提供了一种快速查看背后的方法。
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
}
推荐阅读
- python-3.x - Image_classification 使用 resnet50 模型和带有我的自定义标签的 imagenet db
- cakephp-3.0 - CakePHP 控制器的静态名称
- jquery - 如何通过单击在 WordPress 中使用 AJAX 的链接来插入记录
- python - Qwidget的背景颜色改变时程序随机崩溃
- c# - 如何用一个常数来抵消从sql查询到的系列?
- node.js - 下载大量读取 JSON 文件的图像
- javascript - Send data from jquery ajax request not working
- asp.net-core - .net core 加载资源失败:服务器响应状态为 406(不可接受)
- regex - How to add condition to this Regex?
- amazon-web-services - 亚马逊红移真空重新索引