如何用git把代码发送到服务器?,具体步骤有哪些?

把代码用git发送到服务器,核心思路不是直接“传文件”,而是先在服务器上建一个“裸仓库”,再通过SSH协议把本地提交推上去,最后用钩子自动同步到站点目录。这个过程听起来绕,但一旦跑通,以后发版就是一条git push命令的事,下面把完整步骤、常见坑和方案选型一次讲清楚。

为什么你不能直接对服务器执行“git推送到服务器”

很多新手会尝试在本地执行`git push 服务器IP地址`,结果要么被拒,要么提示找不到仓库,原因在于服务器上必须有一个以.git结尾的裸仓库,裸仓库没有工作目录,只存储版本历史,专门用来接收推送。

用Git上传代码(必看)
加载中
用Git上传代码(必看)

行业共识认为,裸仓库是git服务器部署的基石,它相当于一个“中转站”,本地代码推送到它这里,再由它同步到真正的网页目录(比如/var/www/html),如果不经过这一步,直接推送到普通文件夹,git会报错receiving.denyCurrentBranch,因为服务器端工作区正在被占用。

git部署代码到服务器步骤:从零到自动化

下面这套流程,适合Linux服务器(Ubuntu/Debian系),需要你有SSH登录权限,整个过程大约10分钟。

第一步:服务器安装git并创建裸仓库

先登录服务器,更新源并安装git:

sudo apt update
sudo apt install git -y

然后创建一个专门存放仓库的文件夹,比如/home/git,在这里初始化裸仓库:

cd /home/git
git init --bare myproject.git

看到Initialized empty Git repository提示,就成功了,此时myproject.git就是你的“接收端”。

第二步:本地添加远程地址

回到本地电脑,打开项目文件夹,如果你还没有初始化git,先执行:

git init
git add .
git commit -m "initial commit"

如何用git把代码发送到服务器?,具体步骤有哪些?

接着添加远程服务器地址:

git remote add origin 用户名@服务器IP:/home/git/myproject.git

注意把用户名替换成真实登录账号,服务器IP换成实际地址,最后推送:

git push -u origin master

这一步会要求输入服务器密码,如果看到“master -> master”的输出,代码就算“发送”到服务器了。

第三步:配置钩子让代码自动同步到网站目录

但现在代码还躺在裸仓库里,网站访问不到,需要写一个钩子脚本,让每次推送后自动把文件复制到站点目录。

进入服务器的裸仓库钩子目录:

cd /home/git/myproject.git/hooks
vim post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/myproject git checkout -f

第一行声明用shell执行,第二行的GIT_WORK_TREE指定站点目录,checkout -f强制检出文件,保存后赋予执行权限:

chmod +x post-receive

之后你本地执行git push,代码就会自动出现在/var/www/myproject里,如果站点目录有特殊权限需求,比如需要写入图片,别忘了chown -R www-data:www-data /var/www/myproject。

git推送代码到远程服务器时,分支怎么管理

实际操作中,你可能会碰到多个环境:测试服、预发布服、正式服,聪明做法是用分支对应环境。

用不同分支推不同服务器

比如测试服务器对应`develop`分支,正式服务器对应`master`分支,本地推送时指定分支:

git push origin develop

然后在测试服务器的hook里加上分支判断,避免开发分支代码冲到正式环境,在post-receive脚本开头加一行:

如何用git把代码发送到服务器?,具体步骤有哪些?

if [ "$refname" = "refs/heads/master" ]; then GIT_WORK_TREE=/var/www/production git checkout -f fi

如果推的是develop,正式目录就不会被更新。

分支回滚别用“删库跑路”

代码出问题要回滚,简洁做法是本地强制推旧提交:

git reset --hard HEAD~1
git push origin master -f

但-f会覆盖服务器历史,多人协作时慎用,更稳妥是用git revert生成反向提交,虽然历史多了点,但不会丢记录。

git代码部署服务器哪种方式好:自建裸仓库 vs Git服务端 vs 面板工具

自建裸仓库适合10人以内团队,但每次改钩子、管权限比较费事,下面用表格对比主流方案:

方案 优点 缺点 适合场景
裸仓库+Hooks 轻量、免费、可控性高 需要服务器运维能力 个人项目、小团队
GitLab/Gitea 有Web界面、权限管理、MR流程 吃内存,至少2G RAM 中等团队,需要代码审查
宝塔WebHook 界面化操作,点几下就行 依赖面板,自动化弱 不想写命令行的人

业内专家指出,情况合适时选择自建裸仓库仍是主流方式,因为它的哲学最贴近git本质:推送和同步都发生在同一台机器上,延迟最低。

宝塔面板的部署路径

如果你用宝塔,可以在软件商店安装“WebHook”插件,然后git项目里配置推送地址:

git remote add origin http://服务器IP:端口/webhook?token=你的密钥

推送后宝塔会自动执行预设的shell脚本,通常是cd /www/wwwroot/项目目录 && git pull,这个方案省去了SSH密钥配置,适合新手。

如何用git把代码发送到服务器?,具体步骤有哪些?

git怎么把代码上传到服务器常见问题排查

推送过程经常碰到报错,下面几个高频问题直接给解法。

提示“Permission denied (publickey)”

说明SSH密钥没配对,检查本地有`~/.ssh/id_rsa`(私钥),服务器`~/.ssh/authorized_keys`里有`id_rsa.pub`(公钥),没有就执行:

ssh-keygen -t rsa -b 4096
ssh-copy-id 用户名@服务器IP

推送成功但网站没变

多半是hook里的站点目录路径不对,先在服务器上手动执行`git checkout -f`,看是否报错“找不到仓库”,如果目录有文件但没更新,检查`post-receive`脚本是不是忘了加`chmod +x`。

push时要求输入密码但无法交互

这种情况出现在用HTTP协议而不是SSH协议,确认远程地址以`git@`开头,或者配置credential helper缓存密码。

Q&A:相关高频搜索整理

git部署代码到服务器会不会覆盖现有文件

会,`git checkout -f`会强制覆盖工作区文件,如果目录里有非git管理的文件(比如用户上传的图片),会被保留,前提是这些文件没有和仓库里的文件同名冲突,建议把upload目录写进`.gitignore`,避免重要数据被误删。

git推送代码到远程服务器后,本地和服务器如何保持一致

推送本身是单向的:本地传到服务器,服务器上有本地没有的提交(比如直接在服务器改了文件),下次推送会报冲突,解决方法是推送前先`git pull origin master`拉取服务器最新记录,解决冲突后再推送。

用git部署网站到服务器安全吗

相对安全,前提是开启SSH密钥登录并禁用密码登录,密钥登录比密码更难暴力破解,而且git钩子只执行你定义的同步命令,不会暴露数据库密码等敏感信息,除非你主动把配置文件推送上去,建议将`.env`、数据库密码文件加入`.gitignore`,不上传服务器仓库。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/746528.html

赞 (0)
PS4使命召唤16怎么切换服务器,国服美服选择教程
上一篇 2026年10月14日 13:54
如何在SQL服务器上修改数据库?,详细操作步骤有哪些
下一篇 2026年10月14日 13:55

相关推荐

  • ec服务器怎么把人打成太空人?,ec服务器打飞指令是什么?

    在EC服(Eaglercraft网页版我的世界)里把人打成太空人,核心就一句话:用带击退附魔的武器在疾跑中出手,靠连击锁定把目标推向高空或边界, 这个操作在PVP社区里被叫作“打太空人”,目标一旦吃满两段击退就会腾空,移动方向失控,接下来只能任你摆布,ec服务器pvp击退技巧:装备与附魔是源头击退附魔的等级配置……

    2026年10月10日
    100
  • B站服务器崩溃了怎么领一天会员,补偿入口在哪?

    在B站服务器崩溃后,官方一般会在48小时内通过站内消息推送“一天大会员补偿”,你只需要打开B站App的消息中心点击领取,或者在网页版会员中心页面手动领取到账,这个补偿是官方默认发放的,不需要提交工单,但动作要快,超过领取窗口期就无法补领了,下面把完整流程和坑都给你列清楚,B站回应服务器崩溃怎么领一天会员?官方补……

    2026年8月23日
    1900
  • 衢州第十代i7服务器性能怎么样,值得买吗?

    衢州第十代i7服务器适合预算有限、对计算密度要求不高的中小企业本地部署,用于跑ERP、文件共享、开发测试这类轻量业务完全够用,但别指望它在高并发或长时间满载场景下扛住生产压力,这台机器的口碑两极分化,根源在于大家拿它跟正经服务器芯片比,接下来我按实际使用场景拆开讲,不吹不黑,只看它到底能干什么活,衢州第十代i7……

    2026年8月23日
    800
  • 手机版2b2t服务器怎么进入?,具体步骤是什么?

    想用手机进入2b2t服务器,最直接的办法是通过PojavLauncher这类安卓启动器加载Java版客户端,连接服务器地址“2b2t.org”,但进服前先要有微软正版账号,并且做好面对超长队列和延迟的心理准备,很多玩家第一次听说手机能玩2b2t时都会愣一下,毕竟这是一个以PC端Java版为核心的古老服务器,只要……

    2026年9月5日
    600
  • Sharktech高防VPS年付29.7美元起值得买吗,美国高防VPS推荐

    Sharktech高防VPS年付低至29.7美元,凭借洛杉矶、拉斯维加斯、芝加哥、丹佛及荷兰五大机房优势,成为追求极致性价比与高稳定性用户的优选方案,在服务器租赁市场鱼龙混杂的当下,寻找一款既便宜又抗揍的VPS并非易事,Sharktech之所以能在众多竞争者中脱颖而出,核心在于其独特的定价策略与强大的硬件防护能……

    2026年6月30日
    1300
  • h3c服务器关机一直响是什么原因引起的,怎么解决

    H3C服务器关机一直响怎么回事:先分清是报警还是误报H3C服务器关机后依然持续响铃,核心原因是硬件级故障报警或BMC固件误报,其中风扇、电源、硬盘三类硬件故障占比最高,服务器不像PC那样关机即断电,管理芯片BMC在待机状态下仍在工作,一旦检测到异常就会通过蜂鸣器发声,你需要先判断响声节奏,再逐项排查,多数情况下……

    程序编程 2026年8月9日
    1600
  • idm怎么下载百度网盘服务器未响应

    当IDM下载百度网盘提示服务器未响应时,根本原因是百度网盘对第三方下载工具进行了限制,解决方案包括使用浏览器扩展、修改IDM的User-Agent、或借助解析直链工具,其中油猴脚本直链解析是目前最稳定高效的方法,为什么IDM下载百度网盘总会提示服务器未响应百度网盘为了保护资源安全并引导用户使用官方客户端,部署了……

    2026年8月19日
    1100
  • cloudconeVPS测评,7.5美元/年方案实测对比,cloudconeVPS怎么样,cloudconeVPS测评

    CloudCone 7.5 美元/年方案在 2026 年依然是入门级 VPS 性价比的标杆,适合预算有限且对网络稳定性有基础要求的个人开发者,但需明确其非企业级 SLA 保障,仅推荐用于非核心业务测试或轻量级建站,在 2026 年云计算市场普遍涨价的背景下,CloudCone 依然维持着极具侵略性的定价策略,成……

    2026年5月10日
    5000
  • 服务器ISO用U盘怎么装Win7?,装Win7系统注意什么?

    服务器ISO镜像用U盘安装Win7系统,核心操作是开启CSM兼容模式、将U盘写入Legacy引导的MBR分区格式,并在安装前注入USB3.0与RAID驱动, 这需要你对服务器固件设置和Windows镜像处理有一定了解,但步骤并不复杂,跟着下面的操作路径走就能完成,准备阶段:处理服务器ISO镜像与U盘选型服务器厂……

    2026年9月16日
    400
  • 广电级视频制作分发云平台怎么选?哪个云平台分发流量高

    广电级视频制作分发云平台是2026年超高清视听产业降本增效、实现全终端秒级触达与安全播出的唯一基座,2026广电云平台的核心重构逻辑产业痛点与云原生破局传统广电与长视频制作深陷“重资产、长周期、孤岛化”泥沼,根据【国家广电总局】2026年一季度权威数据,全国超高清视频内容产能需求同比激增47%,但传统制播周期压……

    2026年4月24日
    4500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注