克隆GitHub仓库至服务器的文件影响及站点更新最优方案咨询
问题解答
1. 直接克隆GitHub仓库到服务器会发生什么?
首先得明确:git clone的作用是把仓库的完整内容下载到一个全新的空目录。如果你的public_html已经存放着旧站点的文件,直接执行git clone <仓库地址> public_html会报错——因为Git不允许克隆到非空且包含未被Git跟踪文件的目录里。
要是你先删除public_html里的所有内容再克隆,那确实会完全覆盖成仓库里的内容,但这显然不是你想要的,因为会丢失那些不在仓库里但必需的文件。
2. 如何安全更新站点,保留非仓库必需文件?
正确的思路是在现有public_html目录中初始化Git,关联远程仓库,让Git只管理仓库中已提交的文件,自动忽略未跟踪的非仓库文件。具体步骤如下:
第一步:先备份现有文件(重中之重!)
操作前务必备份public_html下的所有内容,避免意外丢失文件。
第二步:在现有目录初始化Git并关联远程仓库
# 进入站点根目录 cd public_html # 初始化本地Git仓库 git init # 关联你的GitHub远程仓库 git remote add origin <你的GitHub仓库URL>
第三步:同步本地现有文件与远程仓库
因为你的站点结构和仓库一致,先把本地现有文件暂存并提交(作为初始提交):
# 暂存所有与仓库结构匹配的文件 git add . # 提交本地初始版本 git commit -m "Initial commit of existing site files"
然后拉取远程仓库的最新代码(如果远程已有提交,需要允许无关历史合并):
# 拉取远程main分支(如果你的分支是master就换成master) git pull origin main --allow-unrelated-histories
第四步:后续日常更新站点
之后每次需要更新时,只需要在public_html目录执行:
git pull origin main
这时候Git只会更新那些在仓库中有变更的文件,完全不会触动那些未被Git跟踪的非仓库必需文件(比如你通过FTP上传的、没提交到GitHub的配置文件或用户上传内容)。
额外建议:用.gitignore保护非仓库文件
如果有一些固定的非仓库必需文件(比如本地配置文件local-config.php、临时缓存目录等),可以在public_html下创建.gitignore文件,把这些文件/目录加进去:
# 示例:忽略本地配置文件 local-config.php # 示例:忽略用户上传的媒体目录(如果仓库只保留目录结构,不包含实际上传文件) wp-content/uploads/
这样Git会自动忽略这些文件,既不会提示你提交它们,也不会在拉取时覆盖或删除它们。
内容的提问来源于stack exchange,提问作者JPB
相关产品推荐
相关产品推荐

