如何用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/%e5%a6%82%e4%bd%95%e7%94%a8git%e6%8a%8a%e4%bb%a3%e7%a0%81%e5%8f%91%e9%80%81%e5%88%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%ef%bc%9f%ef%bc%8c%e5%85%b7%e4%bd%93%e6%ad%a5%e9%aa%a4%e6%9c%89%e5%93%aa%e4%ba%9b/

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

相关推荐

  • dnf连接服务器失败一直上不去怎么办,怎么解决

    DNF一直连接服务器失败,通常是因为本地网络波动、DNS缓存问题、客户端文件损坏或服务器维护,建议先重启路由器和电脑,再尝试使用网络重置命令和更换DNS,如果仍不行,检查官网公告确认服务器状态,DNF连接服务器失败解决方法:三步排查网络根源区分服务器故障与本地问题遇到连接失败,先别急着折腾自己的电脑,打开DNF……

    2026年7月29日
    500
  • rust怎么才能搜国服服务器?,未响应怎么办

    rust怎么搜国服服务器未响应,核心答案是先分清是搜索列表没刷出来、点击后连接超时、还是进服后反复掉线,再按“本地网络、筛选条件、服务器状态”三个方向依次排查,rust怎么搜国服服务器:先判断未响应的位置“未响应”这个词在Rust里其实有几种不同的表现,先搞清楚具体是哪一种,才能走对排查方向,不少玩家在社区里抱……

    程序编程 2026年11月4日
    000
  • ajax如何传值给数据库?ajax传值给数据库方法

    Ajax通过异步请求将前端数据封装为JSON格式,利用Fetch API或jQuery AJAX发送POST请求至后端接口,后端解析数据后执行SQL插入或更新操作,实现无刷新提交,在现代Web开发中,用户不再满足于页面跳转带来的加载等待,数据交互的流畅性直接决定了产品的用户体验,Ajax技术正是解决这一痛点的核……

    2026年5月30日
    4100
  • Excel如何用宏录制?Excel宏录制步骤详解

    Excel宏(VBA)是自动化处理重复任务的核心工具,通过录制或编写代码,可将原本需数小时的手工操作压缩至秒级完成,显著提升办公效率,为什么你需要掌握Excel宏?在快节奏的职场环境中,时间就是成本,许多基础办公人员每天花费大量时间在格式调整、数据清洗或报表合并上,这些工作机械、枯燥且极易出错,宏的本质是一段存……

    2026年7月6日
    2500
  • AIoT智能家居产品有哪些?智能家居怎么选才靠谱

    AIoT智能家居的核心价值在于通过人工智能与物联网的深度融合,实现了从“单品智能”向“全屋智能”的跨越,让家居设备具备了主动感知、自主决策与自然交互的能力,从而为用户构建了一个安全、便捷、舒适且节能的现代化居住生态,这不仅是技术的升级,更是生活方式的根本性变革,技术架构重构:从被动控制到主动服务传统的智能家居往……

    2026年3月17日
    12100
  • 如何选择AI语音客服代理商?哪家AI智能客服代理好?

    AI语音智能客服代理商:企业客户服务的智能升级核心伙伴AI语音智能客服代理商正迅速成为企业提升客户体验、降低运营成本的核心驱动力,通过整合人工智能技术与专业服务,代理商为企业提供高效、个性化的语音客服解决方案,实现24/7无缝支持,从而在竞争激烈的市场中赢得先机,以下从定义、优势、选择策略、应用实践及未来趋势分……

    2026年2月16日
    13300
  • AJAX如何无刷新检测用户名?前端ajax异步请求实例

    AJAX实现无刷新检测用户名的核心在于利用XMLHttpRequest或Fetch API异步发送请求,通过回调函数动态更新DOM元素,从而在用户输入时即时反馈结果,避免页面重载带来的体验中断,在Web开发早期,表单提交是验证用户数据的唯一方式,用户填完所有信息,点击“注册”,如果用户名已存在,整个页面刷新,刚……

    2026年5月31日
    4600
  • lol提示网无法连接服务器是怎么回事啊,怎么解决?

    lol提示网无法连接服务器,多数情况不是电脑坏了,而是游戏客户端与服务器之间的网络链路出了岔子,先重启路由器、再检查WeGame修复,通常能解决,游戏页面突然弹出“无法连接服务器”,对正在排队打排位的人来说确实闹心,这个问题在玩家社区里讨论热度一直不低,有人遇到一次就没了,有人连续几天都被卡在登录界面,其实抛开……

    2026年9月7日
    300
  • 合服操作前数据校验与容量评估步骤是什么,具体怎么做?

    数据校验与容量评估必须前置到停服窗口之前的48小时以上,用脚本自动化比对代替人工抽检,容量评估则需以“业务增长峰值×冗余系数”为基准,而非简单累加当前数据量,很多团队把合服当成一次“数据搬运”,结果搬到一半发现主键冲突、外键悬挂、自增ID撞车,回滚又得花双倍时间,2026年的运维环境里,合服失败多半不是因为机器……

    2026年9月6日
    100
  • 跨省传输业务选贵阳独享带宽如何避坑,有哪些注意事项?

    跨省传输业务选择贵阳独享带宽,核心在于关注网络延迟、BGP线路质量以及带宽性价比,避免陷入低价陷阱影响传输效率,贵阳独享带宽价格与跨省传输场景的匹配跨省传输业务带宽怎么选跨省传输业务类型多样,带宽选择必须量身定制,实时交互类业务如视频会议、远程控制、在线交易,对延迟和丢包率极其敏感,需要低延迟的BGP带宽,批量……

    2026年8月12日
    800

发表回复

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