如果一个存储库有许多分支:如何简单地更新所有分支的文件。
在这种情况下,它是一个类似 bashrc 的文件,它指定了一些环境变量。我过去更新了主分支版本,然后重新建立了每个分支的基础。这有一种 n+1 的开销,我想避免。
如果一个存储库有许多分支:如何简单地更新所有分支的文件。
在这种情况下,它是一个类似 bashrc 的文件,它指定了一些环境变量。我过去更新了主分支版本,然后重新建立了每个分支的基础。这有一种 n+1 的开销,我想避免。
git checkout
来自另一个分支的特定文件”(git checkout <branch_name> -- <paths>
来自git checkout
手册页)IE:
#!/bin/bash
branches=()
eval "$(git for-each-ref --shell --format='branches+=(%(refname))' refs/heads/)"
for branch in "${branches[@]}"; do
if [[ "${branch}" != "master" ]]; then
git checkout ${branch}
git checkout master -- yourFile
fi
done
(这适合您的情况,因为它总是从master
分支中签出文件。)
我认为,这有点晚了,但下面的脚本会帮助你。
#!/bin/bash
if [ $# != 1 ]; then
echo "usage: $0 <filename>"
exit;
fi
branches=`git for-each-ref --format='%(refname:short)' refs/heads/\*`
curr_branch=`git rev-parse --abbrev-ref HEAD`
# echo "curr_branch:"$curr_branch
filename=$1
file_in_repo=`git ls-files ${filename}`
if [ ! "$file_in_repo" ]; then
echo "file not added in current branch"
exit
fi
for branch in ${branches[@]}; do
if [[ ${branch} != ${curr_branch} ]]; then
git checkout "${branch}"
git checkout "${curr_branch}" -- "$filename"
git commit -am "Added $filename in $branch from $curr_branch"
echo ""
fi
done
git checkout "${curr_branch}"