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

问题描述 投票:0回答:1

我的软件开发伙伴们大家好,

我的 git 存储库中有两个具有不同 .gitignore 文件的分支,

develop
feature/my_feature
。有些文件存在于
feature/my_feature
中但不存在于
develop
中。 将分支
feature/my_feature
合并回
develop
分支时,我希望自动排除
develop
分支中尚未存在的文件。

我尝试了 Git Book 中相应章节以及 StackOverflow 帖子 Git - 在合并期间忽略文件中提出的策略,但是 develop

 分支中缺少的文件会导致发生冲突,即不会自动解决。

我还尝试了 StackOverflow 帖子

(Git Merging)何时使用“我们的”策略、“我们的”选项和“他们的”选项?中提出的策略,使用以下 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
 分支中尚未存在的文件?

编辑2023年10月24日08:35: 我不知道这是否重要,但我正在使用 git 2.35.1.windows.2 在 Windows 10 22H2 上工作。

提前感谢您的帮助!

最好的, 弗朗西斯科

git gitignore conflict merge-strategy
1个回答
0
投票
我想我已经找到了一个可以接受的解决方案。

将以下代码放入

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
     文件中存在的所有暂存文件

缺点

这相当于清理工作树,这可能是不需要的。

© www.soinside.com 2019 - 2024. All rights reserved.