为什么Git的教程都那么繁杂?

git 就是那么复杂, git 的复杂性来源于分布式的复杂性, 你觉得简单很可能是压根没用到 git 的核心卖点.git 厚厚那本书 98% 的内容是给那 2% 的刁钻需求写的, 你用不上自然想不通这是在干嘛.比如你就是 clone boy, force push boy 那当然一眼就会了, 但是 pull 和 merge 就开始复杂了.我个人碰到过传说中的 211 高材生策划也学不会 merge 的惨案, 我问了几个常用的使用场景他都对答如流, 我以为他懂了.结果某天美术告诉我一片紫, 我查 log 才发现他的 merge resolve 每次都是直接把别人改动给删了传的.我直接好家伙, 周会直接批斗大会.然后三大重灾区 git lfs, git subtree, git submodule, 大多数非程序都学不会.所以 git 对团队素质的要求特别高, 基本上除非是纯程序团队, 否则是带不动的.所以 git 为啥设计这么复杂, 因为 git 想要解决的问题叫做分布式无锁开发.传统开发是单源带锁的开发模型, 这个大多数人都能理解并接受.但是在开源世界是没有单源这种说法的, 每个节点都可以是 head, 所以每个节点都要存 history.同时还要 lockfree, 每个人都能自由的改写代码, 所以有 stage, 有 index, 有 branch.然后就会遇到分布式一致性问题, 于是有 diff, 有 squash 有 merge.这些我觉得是没什么问题的, 到此为止还不算难.问题在于 git 试图引用别的东西比如引用二进制文件, 导致 git lfs, 引用别的项目, 导致 git subtree.引用了还要改, 改了还要同步, 产物就是 git submodule, 叠加上下游的一致性问题, 这东西复杂到爆.曾经尝试过让美术用 git 管理资源, 然后主项目用 submodule 引用就好, 还给他们脚本都写好了, 双击就行了.就这, 还天天出问题, 每次都要跑下楼帮他们提交, 给自己锻炼身体.我最后意识到教的会的人一通百通, 教不会的永远教不会.带不动带不动, single source mono repo 挺好的, 老板加钱上 p4!