使用git将源分支合并到目标分支中时忽略目标分支中不存在的文件

dw1jzc5e  于 2023-11-15  发布在  Git
关注(0)|答案(1)|浏览(130)

你好,我的SW开发人员,
在我的git仓库中,我有两个分支,developfeature/my_feature,它们有不同的.gitignore文件。有些文件在feature/my_feature中存在,而在develop中不存在。当将分支feature/my_feature合并回develop分支时,我希望自动忽略develop分支中不存在的文件。
我尝试了Git Book中的相应章节以及StackOverflow post Git - Ignore files during merge中提出的策略,但是在develop分支中丢失的文件导致了冲突的发生,并且不会自动解决。
我还尝试了StackOverflow帖子(Git Merging) When to use 'ours' strategy, 'ours' option and 'theirs' option?中提出的策略,使用下面的bash脚本custom-merge.sh(出于测试目的,它被放置在我的存储库的根目录中)来定义策略custom

#!/bin/sh
# Custom merge script to handle conflicts caused by files not present in current branch

# Check if the file exists in the current branch
if test -e "$1"; then
    # File exists in current branch, use default merge strategy
    git merge-file "$1" "$2" "$3"
else
    # File does not exist in current branch, keep file from branch being merged
    git checkout --theirs -- "$1"
    git add "$1"
fi

字符串
我使用以下命令将策略添加到我的存储库中:

git config --local merge.custom.name "Custom merge driver to handle conflicts caused by files not present in current branch"
git config --local merge.custom.driver "custom-merge.sh %O %A %B"


另外,当尝试将策略添加到全局git配置中并使用custom-merge.sh的完整路径时,git返回以下错误:

Could not find merge strategy 'custom'.
Available strategies are: octopus ours recursive resolve subtree.


如何将分支feature/my_feature合并回develop分支中,同时从合并中自动排除develop分支中不存在的文件?

编辑24.10.2023 08:35:

我不知道这是否重要,但我正在使用git 2.35.1.windows.2在Windows 10 22 H2上工作。
提前感谢您的帮助!
贝斯特,弗朗西斯科

shyt4zoc

shyt4zoc1#

我想我找到了一个可以接受的解决办法。
将以下代码放入pre-merge-commit钩子中,在合并之前删除忽略的文件:

git restore --staged --worktree -- *.gitignore
git rm --cached --ignore-unmatch $(git ls-files --cached --ignored --exclude-standard)

字符串

说明

  1. git restore --staged --worktree -- *.gitignore还原目标分支中的所有.gitignore文件。
  2. git rm --cached --ignore-unmatch $(git ls-files --cached --ignored --exclude-standard)删除所有.gitignore文件中存在的所有暂存文件

缺点

这几乎等同于清理工作树,这可能是不希望的。

相关问题