无需重新克隆,实现本地与服务器Git仓库同步及推送的方案问询
解决方案:同步本地Git仓库与服务器裸仓库(无需重新克隆)
步骤1:将服务器工作目录的现有变更提交到裸仓库
服务器工作目录(/root/server/resources)的修改未纳入裸仓库,需先完成同步:
- 进入服务器工作目录:
cd /root/server/resources - 临时关联到裸仓库:
git init git remote add origin /root/git/server.git - 提交所有变更到本地临时仓库:
git add . git commit -m "Sync server working directory changes to bare repo" - 推送到服务器裸仓库的master分支:
git push origin master - (可选)删除工作目录下的临时
.git文件夹,避免误操作:rm -rf .git
步骤2:本地仓库同步服务器裸仓库内容
本地已有仓库,无需重新克隆,通过以下步骤同步:
- 添加服务器裸仓库作为本地远程仓库(替换
user@server-ip为实际服务器登录信息):git remote add server ssh://user@server-ip/root/git/server.git - 拉取服务器master分支的内容到本地:
git pull server master- 若本地有未提交的变更,先执行
git stash暂存或提交后再拉取 - 出现冲突时,手动解决冲突后提交变更
- 若本地有未提交的变更,先执行
步骤3:验证双向推送功能
- 本地修改文件后,提交并推送到服务器:
服务器的git add . git commit -m "Test local push to server" git push server masterpost-receive钩子会自动将变更同步到/root/server/resources工作目录 - 若服务器工作目录后续有修改,重复步骤1提交到裸仓库,本地再拉取即可同步
注意事项
- 确保
post-receive钩子有执行权限:chmod +x /root/git/server.git/hooks/post-receive - 尽量避免直接修改服务器工作目录的文件,通过Git推送同步,保持仓库一致性
- 其他开发者只需在本地执行步骤2添加服务器远程,即可参与推送
内容的提问来源于stack exchange,提问作者Alireza Behnamnik
相关产品推荐
相关产品推荐

