返回
1010 字
5 分钟
0 次阅读
把项目传到 GitHub,我踩的坑

东西在自己电脑上跑通了,下一步就是传上去。 我以为这事十分钟能弄完,结果搞了一个晚上。

第一个坑:我在错的目录里 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_Store
Terminal window
git rm -r --cached server/node_modules
git 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 别对中文做转义:

Terminal window
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, 里面也能看到我那几个中文名的脚本。

这篇文章讲的东西,可以在这里下载

全部东西都在下载区, 包括模组、地图和软件。

把项目传到 GitHub,我踩的坑
https://liyuanjie.com/posts/fifth-post/
作者
Liyuanjie
发布于
2026-06-28
许可协议
CC BY-NC-SA 4.0
这篇被看了 0 次