Git 本地仓库上传到服务器裸仓库完整流程

目标

  • 本地已有完整 Git 仓库(包含提交历史)
  • 服务器上创建裸仓库(bare repository)
  • 将本地仓库上传到服务器,保留历史提交
  • 以后可以正常 clone、push、pull

1. 在服务器上创建裸仓库

SSH 登录服务器:

ssh user@server

创建裸仓库目录:

mkdir -p ~/repos
cd ~/repos
git init --bare project.git

说明:

  • project.git 是裸仓库目录名,.git 后缀是惯例,可选
  • 裸仓库没有工作区,只存储 Git 对象和 refs

2. 在本地添加远程仓库

进入本地仓库目录:

cd ~/myproject

添加远程:

git remote add origin user@server:~/repos/project.git

验证远程:

git remote -v

输出示例:

origin  user@server:~/repos/project.git (fetch)
origin  user@server:~/repos/project.git (push)

3. 上传本地仓库到服务器

推送主分支

git push -u origin master

推送所有分支

git push --all origin

推送所有标签

git push --tags

4. 新机器或恢复项目

直接 clone 裸仓库:

git clone user@server:~/repos/project.git

之后可以正常使用:

git push
git pull

5. 附加建议

  • 统一管理裸仓库,例如:
~/repos/
    project.git
    otherproject.git
  • 自动部署(例如 Hugo)可在裸仓库 hooks 写脚本:
# hooks/post-receive
#!/bin/bash
GIT_WORK_TREE=/var/www/project git checkout -f

设置可执行:

chmod +x hooks/post-receive
  • 推荐保留 .git 后缀以便区分普通目录和裸仓库

6. 总结流程

  1. 服务器:git init --bare ~/repos/project.git
  2. 本地:git remote add origin user@server:~/repos/project.git
  3. 本地:git push -u origin master(可加 --all--tags
  4. 新机器 / 恢复:git clone user@server:~/repos/project.git