你好,我的SW开发人员,
在我的git仓库中,我有两个分支,develop
和feature/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上工作。
提前感谢您的帮助!
贝斯特,弗朗西斯科
1条答案
按热度按时间shyt4zoc1#
我想我找到了一个可以接受的解决办法。
将以下代码放入
pre-merge-commit
钩子中,在合并之前删除忽略的文件:字符串
说明
git restore --staged --worktree -- *.gitignore
还原目标分支中的所有.gitignore
文件。git rm --cached --ignore-unmatch $(git ls-files --cached --ignored --exclude-standard)
删除所有.gitignore
文件中存在的所有暂存文件缺点
这几乎等同于清理工作树,这可能是不希望的。