如何找出哪些Git分支影响给定的子目录?

时间:2014-01-22 03:20:29

标签: git

在该分支中给定基本分支master和子目录A,如何列出与master的差异包含A内容变化的所有分支?

我的用例:我在具有大量分支的活动存储库上执行subtree split,我还需要迁移所有受影响的分支。我想避免手动检查每个分支机构的变更或联系所有分支机构所有者。

1 个答案:

答案 0 :(得分:0)

我最终将其编写为:

#!/bin/bash

BASE_BRANCH=$1
DIR=$2

while read -r branch; do
    while read -r file; do
        if [ ${file:0:${#DIR}} == "$DIR" ] ; then
            echo "$branch"
            break
        fi
    done < <(git --no-pager diff --name-only $BASE_BRANCH...$branch)
done < <(git branch -a --no-merged $BASE_BRANCH | cut -c 3-)

这需要两个参数,基本分支(在我的示例中为master)和要检查的子目录(在我的示例中,我为A/提供斜杠以避免前缀匹配'实际上是一个目录)。

外部循环遍历所有尚未合并到基本分支的分支。然后内部循环遍历每个已从基本分支修改的文件。当文件的前缀匹配时,分支名称将被发送到输出。