问题描述
我有一个发行版分支(主)和一些其他分支用于开发目的的git回购。
作为一个嵌入式项目,每个编译都会生成或修改一些.tbl文件。我需要保持主分支中的tbl文件不被修改(除非有新版本),因此不要与其他分支合并来修改这些tbl文件。
I已经尝试将tbl文件声明为二进制文件或者使用
您可以设置 *。tbl merge =我们的位于 .gitattributes 文件,
并添加了全局设置:
git config --global merge.ours.driver true
它只保留 *。tbl 文件在 master 分支上的部分情况的版本(前两种情况如下)。
将其他分支合并到 master 时,那里对于 *。tbl 文件有三种情况:
git merge branchname
git checkout HEAD〜* .tbl
git提交-m'将文件切换为主文件上的版本'
顺便说一句,如果 *。tbl 文件对非主分支上的版本控制不是必需的,那么您只能管理 master 分支。
或者您可以参考另一个选项:管理文件 *。tbl 在单独的分支中(例如 tbl 分支)。
即使 *。tbl 文件可能会覆盖 master 分支,版本在 tbl 分支上应该是正确的。当你需要一个新版本时,你可以从 tbl 分支签出版本到 master 分支:
git checkout master
git checkout tbl * .tbl
git commit -m'将版本恢复为最新版本'
然后您就可以为新版本做准备了。
在 master 分支上发布后,您可以更新 tbl 分支上的文件:
git checkout tbl
git checkout master * .tbl
git commit -m'用tbl分支上的新版本更新文件'
I have a git repo with a release branch ("master") and some other branches for develop purposes.
Being an embedded project, there are some .tbl files which are generated or modified on every compilation. I need to keep the tbl files in the master branch not modified (unless there is a new release) and therefore prevent merging with other branches from modifying those tbl files.
I already tried declaring tbl files as binary or using *.tbl merge=ours but as specified in https://git-scm.com/docs/git-merge this only work in case of conflict.
Has anyone ever run across a similar situation?
You can set *.tbl merge=ours in .gitattributes file,and add global setting:
git config --global merge.ours.driver true
It only keep the version of *.tbl file on master branch for part of situations (as the first two situations as below).
When you merge other branches into master, there has three situations for the *.tbl file:
- Has conflict for the *.tbl file when merging: that means the version of *.tbl file in other branches is different from the version in master branch. Since you have set merge strategies for the *.tbl as ours. Then the version of *.tbl on master branch will be ketp.
- Did not change the *.tbl file on both sides: that means both the versions of *.tbl file on master the other branches are same, so don’t worry the *.tbl file on master branch is overwritten.
Change the *.tbl file only on other branches side: this will overwrite the *.tbl file with the version of the other branches since git merge use the recursive merge strategy. So you need to switch *.tbl file with the version on master branch. So you can use below commands:
git merge branchname git checkout HEAD~ *.tbl git commit -m 'switch the file as the version on master'
BTW, if the *.tbl file is not necessary to version control on non-master branches, you can only manage the file on master branch.
Or there is another option you can refer: manage the file *.tbl in a separate branch (such tbl branch).
Even the *.tbl file may be overwritten on master branch, the version on tbl branch should be correct. When you need a new release, you can checkout the version from tbl branch to master branch:
git checkout master git checkout tbl *.tbl git commit -m 'recovery the version as last release'
Then you can prepare for the new release.
After releasing on master branch you can update the file on tbl branch:
git checkout tbl git checkout master *.tbl git commit -m 'update the file with new release version on tbl branch'
这篇关于防止在主分支上合并某种文件 - Git的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!