到目前为止,项目历史只存在于一个仓库里。团队协作还需要一个共同交换提交的仓库。本节会建立裸仓库,把它命名为 origin,推送 main,再克隆出成员“小周”的工作副本。

远程协作最容易混淆的是 clone、fetch、pull 和 push:
远程仓库只是另一个 Git 仓库。GitHub、GitLab 等平台在仓库之外提供权限、代码评审、议题和自动化功能,但提交交换仍建立在这些基本动作上。
保持当前位于 team-task-board,创建用于交换提交的仓库:
mkdir -p ../remote
git init --bare ../remote/task-board.git结果示例:
Initialized empty Git repository in .../remote/task-board.git/裸仓库只有 Git 数据,没有可直接编辑的工作区,所以适合当共享中转站。团队成员不进入裸仓库改文件,而是从各自工作副本推送和获取提交。
这里用文件路径模拟团队服务器,目的是把网络和账号因素拿掉,先看清 Git 的传输过程。换成 HTTPS 或 SSH 地址时,remote、push、fetch 和 pull 的行为不变。
给远程地址起名:
git remote add origin ../remote/task-board.git
git remote -v结果示例:
origin ../remote/task-board.git (fetch)
origin ../remote/task-board.git (push)origin 只是约定俗成的短名称,不是特殊服务器。一个仓库也可以配置多个远程地址。
第一次推送时建立跟踪关系:
git push -u origin main-u 把当前 main 和 origin/main 关联起来。以后位于这个分支时,可以直接使用 git push,也可以用 git pull --ff-only 获取更新。
检查关联:
git branch -vv结果示例:
* main 05dc2c4 [origin/main] merge: add task priorities方括号里的 origin/main 是远程跟踪分支。它记录“上一次与 origin 通信时,远程 main 在哪里”,不是你直接编辑的分支。
模拟成员“小周”加入项目:
git clone ../remote/task-board.git ../bob-workspace结果:
Cloning into '../bob-workspace'...
done.进入新副本并配置成员身份:
cd ../bob-workspace
git config user.name "小周"
git config user.email "xiaozhou@example.com"
git log --oneline -3结果示例:
05dc2c4 merge: add task priorities
811b95f docs: add usage guide
ae5f2ea feat: add task priorities克隆得到的不只是最新文件,还包括可到达的提交历史、分支信息和默认远程地址。执行:
git remote -v新副本也会看到名为 origin 的远程地址。
如果已经在托管平台创建空仓库,只需把文件路径换成平台提供的 URL:
# HTTPS 示例
git remote set-url origin https://example.com/team/task-board.git
# SSH 示例
git remote set-url origin git@example.com:team/task-board.gitHTTPS 通常配合访问令牌或凭证管理器,SSH 使用密钥。不要把令牌、私钥或 .env 文件提交进仓库。
发现地址写错时,不必删除仓库:
git remote set-url origin 正确地址
git remote -v推送前先用 git status 和 git log --oneline origin/main..main 检查尚未发布的提交:
git log --oneline origin/main..main没有输出表示当前 main 没有领先 origin/main 的提交。
在原项目执行 git remote -v,确认获取与推送地址都指向预期仓库。
执行 git branch -vv,确认 main 正在跟踪 origin/main。
在第二个工作副本执行 git log --oneline,确认能看到原项目已有提交。
分别执行 git status --short,两个工作副本都应没有输出。
下一节会让小林和小周同时修改 tasks.md 的负责人一行。两边都能正确提交,但第二位整合变更的人会遇到一次可控的冲突。