本地/服务器搭建Git仓库(非GitHub)及分支创建报错解决指南
本地与服务器Git仓库搭建及分支创建问题解决
先把错误给你掰明白
你碰到的this operation must be run in a work tree错误,说白了就是你在**裸仓库(bare repository)**里干了它干不了的事儿——裸仓库没有本地工作目录,只能用来接收推送、让大家拉取代码,根本没法直接创建分支、提交修改这类需要操作代码文件的操作。
完整搭建+分支操作指南(本地+服务器)
1. 服务器端创建裸仓库
登录你的服务器,选个合适的存储目录(比如/opt/git/myproject.git),执行以下命令:
mkdir -p /opt/git/myproject.git cd /opt/git/myproject.git git init --bare
--bare是创建裸仓库的关键参数,这种仓库专门用作团队共享的远程仓库,不需要本地工作目录,只负责同步代码。
2. 本地创建工作仓库并关联服务器
在你自己的电脑上,选个工作目录(比如桌面的myproject文件夹):
mkdir myproject cd myproject git init # 这是带工作目录的普通仓库,能正常写代码、管理分支 # 先做一个初始提交(不然无法推送到服务器) echo "# 我的项目" > README.md git add README.md git commit -m "初始提交" # 关联服务器的裸仓库,替换成你的服务器用户名和IP git remote add origin ssh://你的用户名@服务器IP:/opt/git/myproject.git # 把本地代码推送到服务器 git push -u origin main
3. 正确创建分支的姿势
记住:所有分支创建、代码修改操作都要在本地的工作仓库里完成,服务器裸仓库只负责同步分支:
方法一:本地创建分支并推送到服务器(推荐)
# 创建并切换到新分支(比如功能分支feature/支付模块) git checkout -b feature/payment # 如果你的Git版本在2.23及以上,也可以用更直观的命令 git switch -c feature/payment # 做一些代码修改并提交 echo "支付模块核心逻辑" > payment.js git add payment.js git commit -m "添加支付模块核心代码" # 将新分支推送到服务器,其他人就能拉取这个分支开发了 git push origin feature/payment
方法二:在服务器裸仓库直接创建分支(不推荐)
要是你已经在服务器裸仓库里了,也能直接创建分支,但这种分支是空的,没有任何提交记录,仅适用于临时创建空分支的场景:
# 在服务器的裸仓库目录下执行 git branch feature/payment
4. 后续日常开发流程
- 本地开发:在对应分支上修改代码,完成后执行
git add、git commit提交 - 同步到服务器:
git push origin 分支名 - 拉取服务器最新代码:
git pull origin 分支名 - 切换本地分支:
git checkout 分支名或git switch 分支名 - 删除远程分支:
git push origin --delete 分支名
避坑提醒
- 服务器的裸仓库只做代码中转站,不要在里面执行任何需要工作目录的命令(比如
git add、git commit、git checkout),否则一定会报错。 - 所有的分支管理、代码开发都在本地工作仓库完成,再推送到服务器共享。
内容的提问来源于stack exchange,提问作者Anuradha
相关产品推荐
相关产品推荐

