Git合并Dev到Master分支时,忽略指定跟踪文件失败求助
问题
我有两个分支:dev和master。dev分支中有一个我不希望出现在master分支中的文件,但仍需对其进行跟踪。不过我无法让Git在从dev合并到master时忽略该文件。
我使用两台机器,一台用于向dev分支提交代码,另一台用于执行合并操作。我的操作步骤如下:
- 机器1:创建并推送.gitattributes文件
创建包含以下内容的.gitattributes文件:
path/to/file.py merge=ignore
提交文件:
git add .gitattributes git commit -m "adding .gitattributes" git push
- 机器2:执行合并操作
git config --global merge.ignore.driver true git pull git checkout master git merge dev # 该文件既不在master也不在dev中,将在下一步提交 ls path/to/file.py # ls: cannot access 'path/to/file.py': No such file or directory
- 机器1:提交需在合并时忽略的文件
git add path/to/file.py git commit -m "adding file.py" git push
- 机器2:尽管配置了.gitattributes,git merge仍未忽略file.py
git merge dev --no-commit # 文件未被忽略,已准备好合并到master... ls path/to/file.py # path/to/file.py
我哪里操作错了?
编辑:有回答指出这是重复问题,但我实际操作和该方法一致却未生效,因此继续寻求解决方案。另外,提到的Git钩子不具备跨平台性(仓库同时被Windows和Mac用户使用)。
解决方案
问题出在merge=ignore驱动的配置上,你之前用true作为驱动命令完全无效。这个驱动的核心是告诉Git:合并指定文件时,保留当前分支(master)的版本状态,而非直接"忽略"文件。正确的驱动配置需要明确执行保留操作的命令。
正确操作步骤
重新配置merge.ignore驱动(所有执行合并的机器都要做)
替换之前的true命令,用以下配置:git config --global merge.ignore.driver "echo 'Ignoring merge for %P' >&2; exit 0"这个命令会在触发文件合并时输出提示,同时返回成功状态,让Git认为合并已完成,从而保留当前分支(master)的文件状态——如果master原本没有该文件,就不会将dev的文件合并进来。
确保.gitattributes同步到位
在机器2切换到master分支后,先拉取最新代码,确认.gitattributes文件存在且配置正确:git checkout master git pull origin master cat .gitattributes # 需能看到一行:path/to/file.py merge=ignore重新执行合并
现在再执行合并操作:git merge dev此时Git会跳过
path/to/file.py的合并流程,master分支中不会出现这个文件。
额外注意事项
- 如果master分支之前存在过该文件,需要先在master上删除它并提交,之后合并dev时驱动才会生效保留"删除"状态。
- 这个方案是跨平台的,Windows和Mac用户通过Git Bash或系统终端都能正常执行配置命令,无需担心兼容性问题。
内容的提问来源于stack exchange,提问作者elkarel
相关产品推荐
相关产品推荐

