我目前正在Laravel网站上工作,在那里我使用git-post-rereceive挂钩将我的存储库签出到/var/www
。它只是运行git --work-tree=$WEBROOT --git-dir=/var/repo/web.git checkout -f master
到目前为止一切都很好,但我最近添加了将图像上传到网站本身的功能。它们存储在$WEBROOT/public/images/
中,我目前一直在那里放置自己的图像。到目前为止,我所有的图片都在git版本控制下(第一个错误?)。现在,每次推送都会覆盖上传到该文件夹的任何文件。我尝试将该文件夹添加到.gitignore
并从缓存中删除文件,但似乎不起作用——不管怎样,文件都会被覆盖。
我该如何解决这个问题,有没有更好的方法来完成我想要做的事情?
tl;dr:在我自己用git添加图片之前;我的网站是通过结账来部署的。现在图像是从服务器端添加的,我不希望它们被签出覆盖。
我处理过很多wordpress网站,当人们使用管理面板上传图像或添加/修改插件时,也遇到过同样的问题。我目前的解决方法不是最好的方法,但还是这样。
短
1.使用CI软件将所有内容提交到Web服务器的主分支
2.将我的主分支签出到Web服务器上的临时分支
3.将临时暂存分支合并回master
4.将合并后的主文件推回到我的存储库服务器,这样我就可以获得直接添加到服务器上的文件
长
我已安装Jenkins CI(http://jenkins-ci.org/)在带有Git、Gitlab Hook和Git Client插件的Web服务器上,我运行了一个Gitlab服务器(https://about.gitlab.com/gitlab-com/)管理我所有的网站转发。Jenkins和Gitlab都是免费的,但也有付费的替代方案可能效果更好。
我在Jenkins中为我想要的网站设置了一个项目,使用我的Gitlab repo url,将项目设置为签出到一个子目录(我在IIS中的网站webroot),并告诉它签出到特定的分支(暂存),这样它就不会处于分离的头状态。
在"生成环境选项"中,选择"在SCM运行之前运行构建步骤",然后在"执行Windows批处理"命令中输入:
git add--all
git commit-m"添加在git之外添加/修改的本地文件"
下一步,在"生成"选项中再次使用"执行Windows批处理"命令,然后输入:
git签出主机
git合并暂存
在构建后的操作中,我让它将我的主分支推回到Gitlab,这样我的repo就会用实时服务器上的所有文件进行更新。