11.2 推上云端,开始协作 转载

来源:https://github.com/datawhalechina/vibe-vibe

本节目标:理解远程仓库的价值,把代码推到 GitHub,让朋友 clone 下来,解决协作中的冲突和安全问题。

平台选择与注册

GitHub 是国际主流,生态最丰富,开源项目首选。Gitee 国内访问快,中文界面。CNB 是国内新平台,访问速度也不错。选哪个都行,本章以 GitHub 为例,其他平台的操作大同小异。如果你在国内访问 GitHub 速度慢,可以先用 Gitee 或 CNB 起步,以后随时可以迁移。

如果你还没有 GitHub 账号,去 github.com 注册一个。注册过程和普通网站一样——邮箱、用户名、密码。用户名会出现在你的仓库 URL 里(比如 github.com/你的用户名/项目名),选一个你不会后悔的。

第一次推送

SSH 配好了,现在把代码推到 GitHub。

小明告诉 Claude Code:"在 GitHub 上创建一个仓库,把我的项目推上去。" Claude Code 会帮他完成创建远程仓库、关联本地仓库、推送代码这一系列操作。第一次推送时,它会执行类似这样的命令(你不需要记住,了解即可):

git remote add origin git@github.com:xiaoming/personal-douban.git
git push -u origin main

origin 是你给远程仓库起的昵称——就像手机通讯录里你把 GitHub 仓库的地址存成了"origin",以后 push 和 pull 直接拨昵称就行,不用每次都输完整地址。-u 则是把这个昵称设为默认联系人,以后直接按拨号键就行。这些命令你不需要背——Claude Code 会帮你处理。但知道它们的存在有助于你理解终端里在发生什么,不至于看到一堆命令输出时一头雾水。

推送完成后,打开 GitHub 仓库页面,你会看到你的项目文件都在这里,和本地一模一样。如果有 README.md,会自动渲染在页面下方。点击 "commits" 可以看到所有提交记录——和你在本地用 git log 看到的一样,只不过现在是在网页上看。你的代码现在有了两份:一份在本地,一份在 GitHub。硬盘坏了也不怕了。

image-20260227003017220

创建仓库时可以选择 Public(公开)或 Private(私有)。个人项目建议选 Private——你的代码不需要让全世界看到。以后想开源了,随时可以改成 Public。

clone:朋友第一次获取代码

小明把 GitHub 仓库链接发给朋友。朋友第一次获取代码,用的是 clone

clone 和"下载 zip"有什么区别?zip 只给你当前的文件,clone 给你整个项目加上全部提交历史。clone 下来的目录自带 .git 文件夹,可以直接 push 和 pull——它是一个完整的 Git 仓库副本,不是一堆散装文件。

这就是为什么序言里小明发压缩包给朋友的方式不靠谱——压缩包没有版本历史,没有分支信息,没有和远程仓库的关联,就是一堆孤立的文件。朋友拿到压缩包后,改了代码想同步回来,只能再压缩发回去,然后两个人对着微信逐行核对。clone 一次就建立了双向通道,以后所有同步都通过 push 和 pull 完成。

朋友 clone 之后,还需要安装项目依赖。对于 Node.js 项目,就是在项目目录下运行 npm install(或 pnpm install)。

这就是为什么 node_modules 不需要提交到仓库——每个人 clone 后自己安装就行,而且不同系统的依赖包可能编译出不同的二进制文件,Windows 上编译的 .node 文件在 Mac 上跑不了。package.json 记录了项目需要哪些依赖,npm install 会根据它自动下载——这就像菜谱和食材的关系,你分享菜谱(package.json)就行,不需要把食材(node_modules)也打包寄过去。

默认情况下,只有仓库创建者能 push。小明需要在 GitHub 仓库的 Settings → Collaborators 里邀请朋友,朋友接受邀请后才能推送代码。邀请完成后,两个人就可以各自开发了:

小明的电脑                GitHub                 朋友的电脑
    │                      │                        │
    ├── push ──────────→   │                        │
    │                      │   ←────────── push ────┤
    ├── pull ←──────────   │                        │
    │                      │   ──────────→ pull ────┤

.gitignore:打包前的清理清单

小明第一次 push 的时候,把 node_modules 也推上去了。朋友 clone 下来发现仓库有 500MB——其中 490MB 是 node_modules

这就像你给朋友发压缩包,里面夹带了一堆系统临时文件、缓存、回收站里的东西。.gitignore 就是"打包前的清理清单"——列在里面的文件和文件夹,Git 会自动忽略,不会提交到仓库。

一个典型的 .gitignore 应该排除这些东西:node_modules/ 是依赖包,体积巨大(几百 MB 很常见),朋友 clone 后自己 npm install 就行;.env.env.local 是环境变量文件,包含你的 API 密钥和数据库密码,这个后面会专门讲;.DS_StoreThumbs.db 是 macOS 和 Windows 操作系统自动生成的隐藏文件,对项目没有任何用处;dist/.next/build/ 是构建产物,可以从源代码重新生成,没必要存在仓库里。

Claude Code 在初始化项目时通常会自动生成 .gitignore。如果你发现仓库里有不该出现的文件,告诉它帮你清理并更新 .gitignore。这里有一个容易踩的坑:如果 node_modules 已经被提交到仓库了,光在 .gitignore 里加一行是不够的——.gitignore 只对尚未跟踪的文件生效。已经被 Git 跟踪的文件,即使加到 .gitignore 里,Git 也会继续跟踪它的变化。你需要先从仓库中移除它(但保留本地文件),然后再提交。告诉 Claude Code "从 Git 仓库中移除 node_modules 但保留本地文件,并添加到 .gitignore",它会用 git rm --cached 来处理——这就像把一本书从图书馆的借阅登记表上划掉,但书还在你手里。Git 不再跟踪这个文件夹了,但你本地的文件原封不动。

GitHub 页面导览

第一次打开 GitHub 仓库页面,你可能不知道自己在看什么。这里简单介绍几个你会用到的地方。

仓库首页是你看到的第一个页面,也叫 Code 标签。上方是文件列表,和你本地的项目目录一样,下方是 README.md 的渲染预览。文件列表右侧显示每个文件最后一次修改的提交信息和时间。如果你的项目有 README.md(Claude Code 通常会自动创建),它会被渲染成格式化的文档展示在页面下方——这是别人第一眼看到你项目时的"门面"。

点击文件列表上方的 "X commits" 链接,进入提交历史页面。这里能看到所有提交记录,每条记录显示提交信息、作者、时间。点进去能看到那次提交具体改了哪些文件的哪些行——绿色是新增的,红色是删除的。这个页面在你想回顾"上周到底改了什么"或者"这个 bug 是哪次提交引入的"时特别有用。

仓库顶部还有 IssuesPull Requests 两个标签页。Issues 用来记录 bug 和待办事项,Pull Requests 用来审查和合并代码(下一节会详细讲 PR)。现在知道它们在哪就行。

Settings → Collaborators 是邀请朋友协作的地方。添加朋友的 GitHub 用户名,朋友接受邀请后就能 push 代码了。

💡 本节核心要点

代码推到 GitHub,你就有了云端备份和协作基础。SSH 是一次性配置,push/pull 是日常同步,clone 是朋友第一次获取代码的方式。冲突不可怕——它只是 Git 在说"这里我拿不准,你来决定"。最重要的安全底线:密钥和密码永远不要出现在 Git 仓库里。


下一节:小明想加推荐功能,但怕改坏评分系统。11.3 分支、PR 与团队工作流 解决"想试新东西又怕搞坏现有的"这个问题。

最后编辑:Alex 2026-03-05 11:39:51