gpt4 book ai didi

git - 如何在每个 git 分支上运行 makefile

转载 作者:太空狗 更新时间:2023-10-29 14:49:05 26 4
gpt4 key购买 nike

我有一个包含多个分支的 git 存储库。存储库有一个 makefile,它在分支之间是相同的。我想创建一个可以定期运行的 bash 脚本,它从远程存储库中提取所有分支,然后为每个已更改或添加的分支运行 make。然后将创建的可执行文件移动到服务器上的另一个位置,并在开始下一个要处理的分支之前运行 make clean。

我要运行的命令顺序是

make
cp executable /some/other/directory/branch_name
make clean

这甚至可以用 shell 脚本来实现吗,如果可以的话,我该如何着手实现它。如果 shell 脚本不适合这项任务,我还能如何实现相同的结果?

最佳答案

我会做这样的事情:

# fetch updates, but don't merge yet
git fetch # origin is default

# list all branches
git for-each-ref --format='%(refname:short)' refs/heads |
while read branch; do
# if the branch is not the same as the remote branch...
if [ "$(git rev-parse $branch)" != "$(git rev-parse origin/$branch)" ]; then
# only continue to the next step on successful results
git checkout $branch &&
git pull &&
(make &&
cp executable /somewhere/else;
make clean)
# except always make clean as long as we tried to make
#
# you might also consider a hard reset and clean, to guarantee things
# are safe for the next checkout
fi
done

首先获取的好处是您不必不必要地检查没有更改的分支;如果您的存储库很大,这可以节省时间。

显然,在处理错误方面有多种选择;我只是选择了最简单但仍然有意义的东西。对于更复杂的处理,您可能希望执行 if make; 形式的操作;然后 ...;别的 ...; fi,例如:

# die hard on unexpected checkout/pull failures
if ! (git checkout $branch && git pull); then
exit 1
fi
if make; then
cp executable /somewhere/else
else
# report a build failure?
fi
# clean up no matter what
git clean -xdf
git reset --hard

关于git - 如何在每个 git 分支上运行 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871573/

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