在服务器已有目录中部署 Git 仓库
适用场景
本教程为你解决一个非常具体的部署问题:你需要在服务器上一个已经存在的、并且非空的目录(例如由网站面板创建的站点根目录)中,拉取并部署一个 Git 仓库。
因为 git clone 命令只能在空目录或不存在的目录中执行,直接使用会报错,所以我们需要采用“初始化 -> 关联 -> 拉取 -> 重置”这套更灵活的方案。
操作流程
步骤一:准备 GitHub 个人访问令牌 (PAT)
在开始操作服务器之前,我们首先需要准备一个关键的凭据:个人访问令牌(Personal Access Token)。由于 GitHub 不再支持使用账户密码进行命令行操作,令牌是目前唯一的认证方式。
-
登录 GitHub:
在你的电脑浏览器上登录 GitHub 账户。 -
进入开发者设置:
点击右上角头像 →Settings→ 左侧菜单栏底部Developer settings。 -
选择令牌类型:
在左侧菜单中,选择Personal access tokens→Tokens (classic)。 -
生成新令牌:
点击页面右上方的Generate new token按钮,然后选择Generate new token (classic)。 -
配置令牌权限:
- Note (备注):给令牌起个名字,方便你记住它的用途,例如
my-server-deploy。 - Expiration (有效期):选择一个有效期,如
90 days。 - Select scopes (选择权限):这是最重要的一步。 请直接勾选顶级的
repo复选框。这会授予该令牌所有与仓库相关的权限,足以满足部署需求。
- Note (备注):给令牌起个名字,方便你记住它的用途,例如
-
生成并保存令牌:
滚动到页面底部,点击Generate token。 -
⚠️ 立即复制并妥善保管!
页面会显示一串以ghp_开头的字符,这就是你的令牌。请立即复制它,并保存在一个安全的地方。这个令牌只会显示这一次,刷新或关闭页面后将无法再次查看!
步骤二:登录服务器并执行 Git 操作
现在,你已经拥有了令牌,可以正式开始在服务器上部署了。
-
进入目标目录:
通过 SSH 登录你的服务器,然后cd到你想要部署代码的目录。# 将下面的路径替换成你自己的 cd /www/wwwroot/www.site.cn -
初始化并关联仓库:
首先,将这个目录变成一个本地 Git 仓库;然后,告诉它远程仓库的地址。# 1. 初始化 git init# 2. 关联远程仓库 (将 URL 替换成你自己的) git remote add origin https://github.com/www/site.git你可以运行
git remote -v来检查是否关联成功。 -
拉取远程数据并认证:
这是最关键的交互步骤。运行fetch命令来下载远程仓库的所有信息。git fetch origin终端会依次提示你输入凭据:
-
Username for 'https://github.com':在这里输入你的 GitHub 用户名,然后回车。
-
Password for 'https://...':在这里粘贴你在步骤一中生成的个人访问令牌 (PAT)。注意:输入时光标不会移动,这是正常的,粘贴后直接回车即可。
如果凭据正确,你会看到下载对象的进度条,代表数据已成功拉取到本地的
.git数据库中。 -
-
强制更新工作目录:
现在,数据已经下载完毕,我们用最后一条命令,将当前目录的文件强制刷新成和远程仓库一模一样。# 警告:此操作会覆盖本地所有文件,请谨慎操作! # 确保 origin/main 是你仓库的默认分支 (也可能是 origin/master) git reset --hard origin/main当看到
HEAD is now at ...的提示时,就意味着你的目录内容已经和远程仓库完全同步了。 -
验证成果:
最后,确认一下文件是否都已就位。ls -la列出的文件列表应该和你的 GitHub 仓库根目录完全一致。恭喜你,部署成功!
附录:常见问题排查
-
问题:认证失败 (
Authentication failed)- 原因:输入了 GitHub 账户密码,而不是个人访问令牌。
- 解决:严格按照本教程步骤一生成并使用 PAT。
-
问题:网络超时 (
Connection timed out)- 原因:服务器无法连接到
github.com。 - 解决:在服务器上运行
ping github.com测试网络。如果不通,请检查服务器防火墙或云服务商的安全组规则,确保出站的TCP 443端口是开放的。
- 原因:服务器无法连接到
-
问题:所有权可疑 (
dubious ownership)- 原因:当前用户(如
root)没有此目录的所有权,Git 出于安全考虑发出警告并中断操作。 - 解决:按照 Git 的提示,将该目录添加为安全目录即可。
# 将路径替换成你自己的 git config --global --add safe.directory /www/wwwroot/md.xtyzx.cn
- 原因:当前用户(如
