在Windows上搭建Git仓库并推送到远程服务器的完整指南
背景
在本地Windows电脑上开发代码,需要将代码推送到自己的Linux服务器上进行版本管理。本文记录了从零开始配置的完整过程及踩坑记录。
一、本地初始化Git仓库
打开Windows命令行(CMD),执行
cd /d D:\xiaojun\code
git init
git add .
git commit -m "Initial commit"
注意: Windows切换盘符必须用
cd /d,不能省略/d。
二、添加远程仓库
git remote add origin git_xiaojun@xiaojun.cn:/home/git_xiaojun/repos/test-project.git
三、推送到远程
git push -u origin master
四、踩坑记录与解决方案
坑1:远程地址格式错误
错误: ssh: Could not resolve hostname ssh
原因: URL格式写成了 ssh://ssh/...,把协议名当成了主机名。
解决: 正确格式为 git_xiaojun@域名:/仓库路径.git
坑2:SSH连接超时
错误: ssh: connect to host xiaojun.cn port 22: Connection timed out
原因: 服务器防火墙未开放22端口,或SSH服务未启动。
解决: 在服务器上检查SSH服务状态,开放防火墙端口。
坑3:仓库路径不正确
错误: does not appear to be a git repository
原因: 远程地址中的路径与服务器上仓库的实际路径不一致。
解决: 先在服务器上用 pwd 确认仓库的绝对路径,再修正远程地址:
bash
git remote set-url origin git_xiaojun@xiaojun.cn:/实际路径/test-project.git
坑4:权限被拒绝
错误: Permission denied, please try again
原因: SSH密码错误,或服务器上仓库目录的所有者不是当前用户。
解决: 在服务器上修改仓库权限:
bash
sudo chown -R git_xiaojun:git_xiaojun /home/git_xiaojun/repos/test-project.git
sudo chmod -R 755 /home/git_xiaojun/repos/test-project.git
坑5:推送被拒绝(历史不相关)
错误: ! [rejected] master -> master (fetch first)
原因: 本地和远程仓库是独立创建的,提交历史不一致。
解决: 拉取时允许合并不相关的历史:
bash
git pull origin master --allow-unrelated-histories
git push -u origin master
五、服务器端准备(提前操作)
推送前需在服务器上创建裸仓库:
bash
ssh git_xiaojun@xiaojun.cn
mkdir -p ~/repos
cd ~/repos
git init --bare test-project.git
总结
搭建Git远程仓库的关键点:
- 服务器上先创建裸仓库(
git init --bare) - 确保远程地址的路径与服务器实际路径完全一致
- 确保SSH连接正常、用户有仓库的读写权限
- 本地和远程历史不一致时使用
--allow-unrelated-histories