第 19.5 节 Git 大败局
Git 用的越久觉得有欠缺的地方越多,设计就是反人类。我恐怕他自己也不知道设计的什么。和那套 gcc 语法一样反人类。
Git 的合并就是一例,一件事得干三次,add commit merge,有什么意义?命令得允许缩写。
Git 有一大堆乱七八糟没人能说清的东西,Git 就和 Linux 一样,全是缺陷。我知道有这个用,但是什么意思呢,没人说得清。
得能支持各种代理,而且默认情况下跟随系统代理。
需要兼容 Windows,和 bash 解耦合。加入 NTFS 兼容设置,默认开启,凡是 NTFS 下禁止事项均要实现,比如不要往文件名里加英文逗号,应该以代替参数自动转换;奇葩软链接改用类似子模块的方式。提高平台兼容性。得支持 gbk,windows 下都是乱码。甚至没有一款全功能的 GUI 软件。
要简单易懂。不要整一堆没人看懂的什么 merge rebase 还有一堆乱七八糟的命令。rebase merge 我至今没见过一个人说得清楚。要重新设计语法增加快速回退,现在回退还分四个参数,hard soft mix keep 什么的:这些乱七八糟参数谁知道到底什么意思?
优化二进制文件存储方式。Git 不只保存差异,他每次改都保留一份原本。他现在 1M 的文本改一次,只加一个逗号,也重新多一个 1M 的记录。改十次就是多 10M 记录文件。Git 的差异存储是依赖于 gc 的,而 gc 是伪功能。
版本控制工具自己的数据要能自动清除和压缩。Git 的
gc
就是假的。除非整个项目只有你一个人。 你不知道的是,任何二进制文件在 Git 项目中根本移不出去,除非把整个项目下载下来,删掉旧仓库再新建再把文件放回去。但是这样没意义,版本控制没了。任何删除二进制和精简的项目都没用。你以为你能删掉,你什么也删不掉。二进制放进去就永远也删不掉了,你本地可以,但是你推不到 main。原理很简单啊,你这边删了, 别人一合并,就回来了。而且你只能改你的分支,PR、tag 的分支你根本动不了。除非你删掉所有 PR tag。删了还算什么版本控制。而且 Github PR 是不能删除的。 Github 网站管理员要你列出删除原因,你得符合,你说太大了你看他理你不我试过不搭理我。BFG Repo Cleaner、git filter-repo 之类的也是没用的东西。你无法重写已经 fork 和 PR 的部分。推上去拉回来你就发现大小压根没变。你重写了,删了,他 fork 一推回来就完啦。只要你用 GitHub 并且有 pull 你就压根 gc 不了也删不了任何提交错误的机密信息。 gc 也是个骗局,只要你有任何分支或者 tag 你就没办法 gc。提交要学 SVN,用数字表示版本。但是也允许 sha 索引。应该按数字排序提交 ,整一堆 sha256 人类不可读。每次还得反查看提交时间。SVN 比大小就知道谁先谁后 Git 的提交是按 sha256 判断的。比如下载东西可以指定版本下载,Git 的你知道第 103 次提交叫什么吗?怎么拉取?SVN 直接 checkout 103。
要支持断点续传。从 Git 不支持断点续传我就知道他其他设计也是反人类。
要支持索引目录变化。竟然默认不允许仅新建目录?
要用 BSD 许可证或者更宽容的许可证。
不要用 python
根据仓库大小自动执行推荐性参数,现在的 Git 仓库一大就要东调西调。
支持备份同步功能。Git 的备份一直很麻烦。你只能自己建立一个脚本定时拉取(拉取裸仓库吗?这对吗?)这是防止 GitHub 云端丢失,我找了很多都没有能用的。Gitlab 是可以备份,要收费。就是定时拉取到本地,做备份用,即镜像。
支持 SVN 的特定目录加密功能 。用 Git 就等于全开源了,得允许加密访问, 每个人开发一部分。
拉取效率太低,速度太慢。Git 的拉回来再解压也是无语,太吃 CPU 了,应该允许不解压直接拉的参数。git log 写的也是不是给人看的 。Git 的日志全是 Merge branch 'XXX' of xxx into XXX”
要允许 git checkout 单个目录或文件。多人协作也是伪分布式,应该只允许拉单个目录和文件,别人改其他地方关我什么事。
要支持自动同步上游——子模块也一样。
要允许命令行密码提交。
现在的个人信息就名字和邮件,明显不够用,应该做冗余设计。
最后更新于
这有帮助吗?