使用git部署Laravel站点而不覆盖现有映像

时间:2014-09-10 04:14:45

标签: git laravel web-deployment

我目前正在Laravel网站上工作,我使用git post-receive hook将我的存储库签出到/var/www。它只是运行git --work-tree=$WEBROOT --git-dir=/var/repo/web.git checkout -f master

到目前为止一切都很好,但我最近添加了将图像上传到网站上的功能。它们存储在$WEBROOT/public/images/中,我目前正在放置自己的图像。到目前为止,我的所有图像都在git中受版本控制(第一个错误?)。现在,每次推送都会覆盖上传到该文件夹​​的所有文件。我尝试将该文件夹添加到.gitignore并从缓存中删除文件,但它似乎无法正常工作 - 无论如何,文件似乎都会被覆盖。

我该如何解决这个问题,是否有更好的方法来完成我想要做的事情?

tl; dr:在我用git添加图像之前;我的网站是通过结账部署的。现在图像正在从服务器端添加,我不希望它们被结账覆盖。

1 个答案:

答案 0 :(得分:0)

我与很多wordpress网站合作,当人们使用管理面板上传图片或添加/修改插件时遇到了同样的问题。我目前的解决方法并不是最好的方法,但现在就这样了。

<强>短
1.使用CI软件将所有内容提交到网络服务器的主分支
2.将我的主分支签出到网络服务器上的分段分支 3.将临时分段分支合并回主分区 4.将合并后的主服务器推回到我的存储库服务器,这样我就可以获得直接添加到服务器上的文件了

<强>长
我已经使用Git,Gitlab Hook和Git Client插件在网络服务器上安装了Jenkins CI(http://jenkins-ci.org/),我运行了一个Gitlab服务器(https://about.gitlab.com/gitlab-com/)来管理我的所有网站回购。 Jenkins和Gitlab都是免费的,但有些替代方案可能会更好。

我在Jenkins中设置了一个项目,我的Gitlab repo url用于我想要的网站,将项目设置为结帐到子目录(我的网站在IIS中的webroot),并告诉它结帐到特定分支(暂存)所以它不是一个独立的头状态。

在构建环境选项中,选择在SCM运行之前运行buildstep,然后在执行Windows批处理命令中输入:
git add --all
git commit -m&#34;添加在Git之外添加/修改的本地文件&#34;

接下来在Build选项中再次使用Execute Windows batch命令并输入:
git checkout master
git merge staging

在构建后的操作中,我将它的主分支推回到Gitlab,这样我的repo就会更新来自实时服务器的所有文件。