一般在项目或者产品开发流程中,先是开发人员在本地做好开发及测试,其中可能包含很多用于测试用的目录以及源代码文件,在部署前往往会有一个build过程。web项目最终build产生出优化生产环境下减少http请求的bundle js,已经有了sprite image外加css代码的适合生产部署的系统。在部署的时候,很多文件可能并不想部署到服务器上去。如何处理?

一个可行的策略及步骤如下:

1. 使用.gitattributes文件中的export-ignore来指定哪些文件将不被打包到部署包;

2. 使用git archive命令将master或者integration等branch的内容打包: git archive intergation -o release.zip

3. 将上述release.zip文件解压后即可在生产系统中部署。

以上3个步骤已经是可以工作了。但是可能还是有待改进。比如我们releaes的package也希望在一个repo中做好版本控制,也就是希望放到repo中。同时,我们可能还有一个本地最后测试production release的需求。你当然可以另外建一个repo和目录来专门存放这个包,并且搭建对应的本地生产测试环境。但笔者建议更进一步,也就是使用同一个repo,但是又不希望看到开发repo中太多的历史信息。那么可以继续下面几个步骤:

4. 创建一个deliverable的branch,专门用于保存git archive产生的发布包,并用于本地生产测试。

git checkout --orphan deliverable // 创建deliverable的orphan branch,该分支上将保存所有release包
git rm -rf . // 由于orphan分支创建后所有index的内容都将自动包内含integration分支的内容,我们需要全部删除

5. 将archive integration生成的发布包解压后放到deliverable分支的根目录中。这时deliverable就仅仅包含了干净的发布包文件目录。

6. 使用该发布包继续测试是否work,确认ok后,直接git a . git commit即可。

7. 以后有新的版本发布的话,重复第2.步到第6步即可。

使用git archive命令可以很好地拉取git repo中的一个snapshot,同时在.gitattributes文件中指定归档策略,将一些不必要的文件不放在部署服务器上。

# used to remove files from deployment using `git archive`
# git files
.gitattributes export-ignore
.gitignore export-ignore
# drush files
build.make export-ignore
patches.txt export-ignore
# zen .x files
sites/all/themes/*/sass export-ignore
sites/all/themes/*/sass-extensions export-ignore
sites/all/themes/*/images-source export-ignore
sites/all/themes/*/fonts export-ignore
sites/all/themes/*/config.rb export-ignore
sites/all/themes/*/STARTERKIT export-ignore

最后执行以下命令生成对应的包

git archive master | bzip2 - > latest.tar.bz2

类似gh-pages方法部署

https://coderwall.com/p/-bcoua/how-to-create-gh-pages-branch

https://stackoverflow.com/questions/19980631/what-is-git-checkout-orphan-used-for

https://stackoverflow.com/questions/4750520/git-branch-gh-pages

https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/

https://gist.github.com/chrisjacob/833223

git repo代码部署策略及工具的更多相关文章

  1. 如何清洗 Git Repo 代码仓库

    git prune 如何清洗 Git Repo 代码仓库       在腾讯云上创建您的SQL Cluster>>> »   相信不少团队的代码仓库 Git Repo 变得越来越大. ...

  2. 新浪代码部署手册 git管理工具

    目前新浪云上的应用支持通过Git和SVN来部署代码. Git仓库地址 https://git.sinacloud.com/YOUR_APP_NAME SVN仓库地址 https://svn.sinac ...

  3. 持续集成①安装部署jenkins从git获取代码

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  4. 【CentOS】安装部署jenkins从git获取代码[转]

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  5. 【持续集成】jenkins安装部署从git获取代码

    一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部署Continuous Deployment 1. ...

  6. 使用git代替FTP部署代码到服务器的例子

    这篇文章主要介绍了使用git代替FTP部署代码到服务器的例子,这种方法可以节省流量.节省时间,需要的朋友可以参考下 本地开发完成后,通常会在服务器上部署,有人会使用ftp,有人会使用scp, ftp和 ...

  7. 使用 Git & Repo 下载代码

    客户端安装 Git 安装 git,gitk 网络连接正常的情况下: $ sudo apt-get install git-core gitk git-gui 不能上网,有.deb安装包的,请执行: $ ...

  8. NPM 使用介绍(包管理工具,解决NodeJS代码部署上的很多问题)

    引用地址:http://www.runoob.com/nodejs/nodejs-npm.html NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问 ...

  9. 代码部署工具walle(一)

    一.概述 代码部署上线.权限控制.一键版本回滚,github地址:https://github.com/meolu/walle-web walle是基于php语言做的,所以需要一个php的安装环境. ...

随机推荐

  1. pointer-events/H5页面在iphone6 plus的微信上出现闪退

    一.pointer-events 1.元素加上pointer-events:none后,在js中加点击事件不好使 原因:pointer-events:none关闭所有点击事件,包括js总的 解决:删掉 ...

  2. android listview实现点击某个item后使其显示在屏幕顶端

    在该listview的点击事件中加入一下代码即可 listView.setSelectionFromTop(position, 0);

  3. Python -- Gui编程 -- Win32API的使用

    消息框 messageBox.py import win32api, win32con win32api.MessageBox(0, 'Hello World!', 'Come Here', win3 ...

  4. ES6-Set and Map

    依赖文件地址 :https://github.com/chanceLe/ES6-Basic-Syntax/tree/master/js <!DOCTYPE html> <html&g ...

  5. springcloud-06-feign的使用

    在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Ap ...

  6. Automapper问题记录

    在Automapper使用中会碰到一些未能映射或者错误的问题,这些问题可能会经常忘记如何处理,想到一些就记录一些: 映射值有时为空又不报错的情况 这很可能是由于目标类中的部分属性有问题导致的,最简单的 ...

  7. js jq封装ajax方法

    json文本格式 { "userInfo":[ {name:"admin",password:"123"}, {name:"adm ...

  8. 未能加载“xxx”程序集

    找到程序集名称,去项目文件中查找是否拥有.

  9. Message小结(二)

    当客户端调用一个WCF接口时,客户端将请求消息发送到服务端,服务端再返回回复消息.WCF内部实现了消息处理的所有细节,但是并不意味着一切不可更改.WCF也提供了一些方法让开发人员在消息发送前对消息进行 ...

  10. Unity3d嵌入web网页

    应用场景 程序中的界面风格 UI内容等相关内容需要很容易方便的跟新替换,不使用unity传统的热加载方式,也不想使用和H5等做混合APP的时候, 就用嵌入web来实现. 假如我想替换某个背景图,一般来 ...