如何在Git仓库更新所有分支的文件(How to update a file across all

2019-07-30 22:58发布

在这种AA库中有很多分支的情况:一个人如何简单地更新所有分支机构的文件。

在这种情况下,它就像文件.bashrc中,指定一些环境变量。 我在过去更新了主分支版本,那么重建基础每个分支。 这有一个排序的N + 1层的开销,我想避免的。

Answer 1:

我认为,这是有点晚了,但下面的脚本将帮助您在此。

#!/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}"


Answer 2:

为了延长fork0的评论 ,你需要结合:

  • “ 如何通过所有的Git分支使用bash脚本迭代 ”
  • git checkout从另一分支的特定文件 ”( git checkout <branch_name> -- <paths> ,从git checkout手册页 )

即:

#!/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分支)。



文章来源: How to update a file across all branches in a Git repository