东西在自己电脑上跑通了,下一步就是传上去。 我以为这事十分钟能弄完,结果搞了一个晚上。
第一个坑:我在错的目录里 git init
git init 是在哪个文件夹里敲的,仓库的根就在哪。
我在桌面上敲的,结果整个桌面都变成仓库了 ——
连我放在桌面上的一堆作业和照片都算进去了。
git status 一跑,屏幕上刷出来几千行,
我当时还不知道可以删掉重新来,就这么硬着头皮往下走,
越走越乱,最后是把 .git 文件夹删掉重来的。
正确的做法是先 cd 进项目文件夹,确认一下
pwd 打印出来的路径是你要的那个,再 init。
第二个坑:node_modules 被我一起传上去了
这个最典型。我这个项目服务端只依赖一个库 ws,
但装完之后 server/node_modules/ 里多出来二十几个文件,
我 push 的时候全部一起上去了。
为什么这是个问题:node_modules 是”装出来的”,不是”写出来的”。
别人拿到代码之后自己敲一句 npm install 就有了,
没必要存在仓库里。而且它文件多、版本一变就是一大堆没意义的改动,
看提交记录的时候完全看不出你真正改了什么。
补救办法是补一个 .gitignore,再把它从版本控制里挪出去:
# 装出来的东西,不用进仓库node_modules/
# 我自己的数据:聊天记录、成员账号、加密钥匙data/data.备份-*/
# 系统生成的文件.DS_Storegit rm -r --cached server/node_modulesgit commit -m "把 node_modules 从仓库里挪出去"git push--cached 这个参数是关键:它只把文件从”Git 管的东西”里去掉,
硬盘上的文件还在。不用它的话,本地的文件夹会被一起删掉,
我当时没搞明白,删了一次,重新 npm install 才装回来。
第三个坑:data 文件夹差点传出去
这个比上面那个严重得多。
data/ 里面是聊天记录、家里人账号、群聊、备注名,
还有加密钥匙本身。虽然记录是加密存的,
但配置里那些东西凑在一起,是不该往公开仓库上放的。
我是在 push 之前顺手看了一眼要传的文件列表,才发现的。
现在 data/ 和 data.备份-* 都在
.gitignore 里,README 里也写明了
“你的数据,自动生成,不会传到 GitHub 上”。
顺便说一下,密码文件 data/config.local.json 的权限是 600,
只有我自己读得到,而且密码不在代码里 —— 所以即使代码全公开,
也推不出我家的聊天密码。
第四个坑:中文文件名
我这个项目根目录下有六个双击就能跑的脚本,名字是中文的:
启动HomeChat.command、改密码.command 这种。
我是故意用中文的,因为家里人要用,写英文他们不认识。 传上去之后 GitHub 网页上显示成乱码百分比编码, 看着挺难受,但 clone 下来在 Mac 上还是正常的中文名。
解决倒是能解决 —— 让 Git 别对中文做转义:
git config --global core.quotepath false这样 git status 里显示的就是中文了,
不用再看 "\345\220\257\345\212\250..." 这种一串数字。
最后记两件事
第一,push 之前一定要看一遍要传哪些文件。
git status 加上 git diff --stat,
两秒钟的事,但可能帮你少传一个不该传的文件夹。
我第三次侥幸是运气,不能次次靠运气。
第二,.gitignore 要写在最前面,别等传上去了再补。
补的时候虽然不算麻烦,但已经推上去的东西,
就算后一个提交删掉了,历史记录里其实还在 ——
别人翻你以前的提交还是能看到。这一点我是后来才知道的。
仓库地址: Liyuanjie0808/home-chat_LocalAreaNetworkChat, 里面也能看到我那几个中文名的脚本。