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

标签 git

给定一个基本分支 master 和该分支中的子目录 A,我如何列出与 master 的差异包含以下更改的所有分支A 的内容?

我的用例:我正在做 subtree split在具有大量分支的事件存储库上,我还需要迁移所有受影响的分支。我希望避免手动检查每个分支的更改或联系所有分支所有者。

最佳答案

我最终将其编写为:

#!/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/ 提供斜杠以避免实际不是目录的前缀匹配)。

外层循环迭代所有尚未 merge 到基础分支的分支。然后内循环迭代每个已从基本分支修改的所有文件。当文件的前缀匹配时,分支名称将发送到输出。

关于git - 如何找出哪些 Git 分支影响给定的子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273531/

相关文章:

git - 通过 TeamCity 从 IIS 中删除非事件分支

git - 如何在 Yocto 配方中指定 git 分支

php - Composer VCS 不同的目录名称

使用 Gmail 发送 git imap

eclipse - 在 Eclipse 中克隆后立即取消暂存更改

r - 如何以相对方式使用 setwd?

git - 不使用 gettext 编译 Git

linux - 编译并安装选定版本的 git 后,如何强制共享主机使用我的版本?

git - 查找当前版本和上一版本之间的差异

git - Bash 函数用于查找文件(其名称与正则表达式匹配)已*更改*的所有 Git 提交