提交忽略的文件到仓库
考虑如下场景:
外部依赖从仓库中拉取编译结果(即源码的产出),而产出放在源码中跟随源码一起进行版本管理又不太科学,主要体现在:
- 本地不但要提交源码,还要手动运行编译命令更新产出,将源码及产出一起提交
- 合并代码时,产出部分的冲突其实可以忽略,但还是得在合并时进行处理,这是个重复且冗余的工作
所以正确的做法应该是将构建产出的操作放到持续集成中,这解决了本地手动构建的重复动作。
而产出本身应该排除在版本管理之外,仓库理论上只管理源码即可,这样解决了合并时解决冲突的问题。
假设产出目录为 dist
,将其添加到 .gitignore
以从版本管理中忽略:
+ dist
但由于前面描述的原因,外部一些地方依赖于从仓库拉取产出,所以持续集成中构建产出的产出文件,还应该提交到仓库。
通过 git add -f dist
可以将前面已经配置了忽略的产出目录 dist
强行添加到提交变更中。
然后就可以在持续集成中将产出提交至远端仓库了。
这样做到了本地只有源码,远端始终包含最新源码对应的产出供其他地方拉取使用。
git push -f
针对被 .gitignore
忽略的文件,对其执行git add
会报错误:
$ git add dist/foo.js
The following paths are ignored by one of your .gitignore files:
dist/foo.js
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
通过提示可知如果仍然想要添加到变更并提交,可加上 -f
参数,亦即 git add -f
。
但有个致命的问题,通过 -f
提交的文件会再次回到版本管理范围内,即本地拉取到之后,对这些文件进行的变更会被包含进来。