如何将本地Git项目推送至Namecheap共享主机并实现频繁推送?
解决本地Git仓库推送到Namecheap共享主机后文件未更新的问题
我来帮你搞定这个推送后文件没变化的问题——这是用Namecheap共享主机配置Git时的常见坑,咱们一步步排查并解决:
1. 先在主机上创建裸仓库(关键前提)
你之前大概率创建的是普通Git仓库,而Git默认会拒绝推送到非裸仓库的当前分支(怕覆盖工作区的本地修改),所以必须先在主机上建一个裸仓库:
- 用SSH登录你的Namecheap主机:
ssh your-username@your-domain.com(替换成你的主机账号和域名) - 找个安全的目录存仓库(建议放在
public_html外面,避免暴露仓库文件),比如:mkdir ~/git-repos && cd ~/git-repos - 创建裸仓库:
git init --bare your-project.git
2. 配置本地仓库的远程地址
回到本地的Git仓库,把主机的裸仓库添加为远程:
git remote add production ssh://your-username@your-domain.com/~/git-repos/your-project.git
⚠️ 注意:路径要和你主机上创建的仓库位置完全一致,~/代表你的用户根目录,别写错了。
3. 设置推送后自动同步到网站目录(核心!)
裸仓库本身没有工作区,所以推送后代码不会自动出现在你的网站目录(比如public_html)。咱们用Git的post-receive钩子来自动部署:
- 回到主机的裸仓库,进入hooks目录:
cd ~/git-repos/your-project.git/hooks - 创建
post-receive文件:nano post-receive - 写入以下内容(替换成你的网站目录和分支名):
说明:把#!/bin/sh git --work-tree=/home/your-username/public_html --git-dir=/home/your-username/git-repos/your-project.git checkout -f mainmain换成你本地的默认分支(比如老项目可能是master),两个路径都要用主机上的绝对路径。 - 给钩子文件加执行权限(不然钩子不会运行):
chmod +x post-receive
4. 测试推送
现在回到本地仓库,推送代码到主机:
git push production main
这时候你再去主机的public_html目录看,文件应该已经更新了。
排查之前的问题点
如果之前按官方步骤操作没成功,大概率是这几个原因:
- 用了普通仓库而非裸仓库,导致Git拒绝推送或推送后无工作区同步
- 钩子文件没有设置执行权限,导致推送后不会自动同步到网站目录
- 远程仓库的路径配置错误,推送的目标位置不对
- SSH权限问题:确保你的本地SSH密钥已经添加到主机的
~/.ssh/authorized_keys,或者推送时输入的密码正确
内容的提问来源于stack exchange,提问作者aziz
相关产品推荐
相关产品推荐

