利用git中的tag标签发布新系统

git 基础 - 打标签:http://git-scm.com/book/zh/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE

fcq.10上图来自:PHP项目治理http://www.infoq.com/cn/presentations/php-project-control

git tag v3.07.09 //(开发机)创建一个tag标签
git push origin v3.07.09 //(开发机)将标签上传到远程仓库origin的v3.07.09分支(远程如果没有此分支将自动创建此分支???)
git checkout -b v3.07.09 v3.07.09 //(服务器端)在web服务器里切换标签v3.07.09,根据tag创建一个新分支,与标签名一样,然后切换到这个分支里。也可以不创建新分支,将分支位置切换到tag标签上( git checkout v3.07.09)
git checkout v3.07.08 //(服务器端)回滚数据到上一个版本v3.07.08
至于这里v3.07.08是branch还是tag? 要看上次的操作是否创建这个分支没有。如果有此分支,则为切换到这个分支,这时可以进行修改操作。如果是tag的话,则没有办法进行修改的,此时在切换tag时会提示当前状态为“detached HEAD“, 如果即有以此为名的分支也有tag,则优先切换到分支,否则切换到tag。

此时,远程分支会有一个v3.07.09新分支.

上面最后两步,其实可以用 git pull 和 git checkout tag_name 来代替了,并没有必要根据 tag 创建分支(因为线上不需要修改代码)

原理,客户机通过tag标签上传到git服务器,生产服务器根据tag创建一个相对应的分支,然后切换到此分支,并向外提供服务.(测试的时候,在执行git checkout -b v3.07.09 v3.07.09的时候,会提示tag标签不存在,因为在此前需要重新pull下仓库数据才可以)

 

 

============================================

以下出自:http://www.oschina.net/question/1030451_105857

先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了。

但是这时候 git 可能会提示你当前处于一个“detached HEAD" 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支:

1
git checkout -b branch_name tag_name

这样会从 tag 创建一个分支,然后就和普通的 git 操作一样了。

参考:http://www.gowhich.com/blog/656

删除本地:

git  tag -d v1.1

删除远程:

git push origin :refs/tags/v1.1

注意:

“:refs” 前面要有空格

Swift中的标准函数

Swift中共有74个内建函数,但是在Swift官方文档(“The Swift Programming Language”)中只记录了7中。剩下的67个都没有记录。
本文将列举Swift所有的内建函数。本文中提到的所谓的内建函数是指那些在Swift中不需要导入任何模块(如Foundation等)或者引用任何类就可以使用的函数。
abs(signedNumber): 返回给定的有符号数字的绝对值。很简单,但是没有在文档中记录。
  1. abs(-1) == 1 
  2. abs(-42) == 42 
  3. abs(42) == 42 

Continue reading

进程管理工具Supervisord

Supervisord

上面已经介绍了Go目前是有两种方案来实现他的daemon,但是官方本身还不支持这一块,所以还是建议大家采用第三方成熟工具来管理我们的应用程序,这里我给大家介绍一款目前使用比较广泛的进程管理软件:Supervisord。Supervisord是用Python实现的一款非常实用的进程管理工具。supervisord会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦崩溃会自动重启,这样就可以保证程序执行中断后的情况下有自我修复的功能。 Continue reading

京东网站url规划分析

对于一些大型产品网站,当不同产品项的过滤条件不一样的时候,多个过滤条件会完全不一样。如服装行业与电脑配置的许多参数都不一样。而他们又是如何实现自动通过程序来调用的呢,是一个很值得学习的知识的。

下面我们来通过京东其中一个服装url来看一下,他们是如何实现这一点的。

jd_url_parse1上图是对于一些大类频道的url规划信息。非常的清楚,就不再一一讲述了。下面我们主要讲右侧”条件筛选“这一块. Continue reading

iOS的主要框架介绍(转)

框架是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其它的图片和声音的资源文件。一个共享库定义的方法或函数可以被应用程序调用。

IOS提供了很多你可以在应用程序里调用的框架。要使用一个框架,需要将它添加到你的项目中,你的项目才可以使用它。许多应用程序都使用了如Foundation、UIKit、和Core Graphics这些框架。根据你为应用程序选择的模版,相关的框架就已经被自动引入了。如果默认加入的框架不能满足你的应用程序的需求,你也可以加入需要的框架。 Continue reading

Swift中的柯里化函数

柯里化函数(curried function)的类型相当于一个嵌套函数类型。例如,下面的柯里化函数addTwoNumber()()的类型是Int -> Int -> Int

func addTwoNumbers(a: Int)(b: Int) -> Int{
    return a + b
}
addTwoNumbers(4)(5)      // returns 9

柯里化函数的函数类型从右向左组成一组。例如,函数类型Int -> Int -> Int可以被理解为Int -> (Int -> Int)——也就是说,一个函数传入一个Int然后输出作为另一个函数的输入,然后又返回一个Int。例如,你可以使用如下嵌套函数来重写柯里化函数addTwoNumbers()()

func addTwoNumbers(a: Int) -> (Int -> Int){
    func addTheSecondNumber(b: Int) -> Int{
        return a + b
    }
    return addTheSecondNumber
}
addTwoNumbers(4)(5)     // Returns 9

http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter3/03_Types.html