如何在windows下安装GIT

Python015

如何在windows下安装GIT,第1张

本文在Windows7下测试成功。

安装和设置Git

下载Git for

Windows,采用默认安装,安装完成后就可以在本地使用Git了。

但要将内容放到Github上,必须先在Github网站上注册个账户,然后在本机使用Git创建SSH Key。操作如下:

在Git Bash上输入命令:

ssh-keygen -C "[email protected]" -t rsa

Note: “[email protected]”需要更换成你在Github上注册的Email地址或者是Username

这样会在用户目录(C:\Users\用户名)下产生一个.ssh文件夹,里面为对应的SSH

Keys,其中id_rsa.pub是Github需要的SSH公钥文件。

到c:\Users\用户名\.ssh\目录找到id_rsa.pub(可能位置不一定对,但是确认是以.pub结尾的文件),并用记事本打开复制全部内容。

Note:建议私钥公钥的名称最好写成"id_rsa",这样连接Github的时候会找这个文件,如果文件名已定,之后改名也行。

在github网站选择“Account Settings”>>“SSH Public Keys”>>“Add another

public key”,将刚才复制的内容粘贴到key文本框内。

这样就可以直接使用Git和GitHub了。

Note:建议在Git Bash中输入“ssh -v [email protected]”测试能够正常连接github

安装Ruby环境

下载RubyInstaller和DevKit。

因为Octopress需要的Ruby版本为1.9.2,所以选rubyinstaller-1.9.2-p290.exe,DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe。

先安装RubyInstaller,然后解压缩DevKit(路径中不能有中文)。

在“Start Command Prompt with Ruby”命令行中进入DevKit解压缩的目录,然后运行以下命令:

ruby dk.rb init

ruby dk.rb install

gem install rdiscount --platform=ruby

如果安装成功,就可以使用一些Ruby的工具了,也为后面搭建博客提供了基础环境。

安装Octopress

先通过Git从Github上克隆一份Octopress(在Git Bash上输入命令)

git clone git://github.com/imathis/octopress.git octopress

然后安装一些依赖的工具(后面都是在Start Command Prompt with Ruby中输入)

cd octopress

ruby --version # Should report Ruby 1.9.2

gem install bundler

bundle install

安装Octopress默认的Theme

rake install

配置Octopress

将octopress的文件夹下的_config.yml的编码改成UTF-8:

保存(或另存为)时选择编码格式为UTF-8

修改_config.yml,批改url、title、subtitle、author等等。

到Ruby的安装目次\lib\ruby\gems\1.9.1\gems\jekyll-0.11.2\lib\jekyll\找到convertible.rb这个文件,批改self.content

= File.read(File.join(base, name))为self.content = File.read(File.join(base,

name), :encoding =>"utf-8")。

写博文

最简单的方式:复制octopress\source\_posts下某个文件,例如2012-07-30-the-first-post.markdown,修改文件名和文件中的内容

或者,命令行中输入rake

new_post["title"],会创建一个新的Post,新文件在source/_post下,文件名如下面的格式:2012-07-31-title.markdown。该文件可以直接打开修改。

写文章时,可以使用Markdown和Octopress

Plugins等工具对内容进行格式排版。

预览效果

在修改设置或者写完文章后,想看看具体效果,可以通过如下命令来完成:

rake generate

rake preview

将博客部署到Github上

在预览的效果符合自己的预期后,就可以通过如下命令将内容部署到Github上了。

如果是第一次部署,需要在Github上创建一个username.github.com的repository

在github网站选择“Create a New Repo”,如图

填写对应的内容即可

note:Repository

name填写username.github.com,username一定要和github的username一致,建好的博客代表的是你这个github账户的主页即page

配置octopress与github的连接:

进入Octopress目录:

rake setup_github_pages

按照提示填入你的github项目网址,比如:

[email protected]:Username/yourname.github.com.git

note:可以按照上面的修改,也可以在github的项目页中找地址

分发到github上:

rake deploy

第一次运行时,会询问是否建立对github的授权,输入:yes。然后将站点更新的内容推送到github上。

补充一点:

最后的但并不是最重要的,我们需要将修改的日志同步到github上,因此下面的3个命令也是必须的。

git status

git add .

git commit -m 'your message'

git push origin source

大功告成!

一步步实现Android CI

Android上的CI构建链与其它平台一致,依然包含Compilation, Testing, Inspection,

Deploying阶段,每一个阶段的Feedback的都保持对整个团队透明。

CI中各个步骤执行先后顺序的安排,应该是执行时间较短的优先执行。执行时间短的一般在提交代码前就可执行,错误率也比较低,就应该尽可能先执行。这样失败会来得更早一些,每一次CI运行失败前验证完毕的东西更多。上图中CI的工作流,正是在这样的一个原则的基础上形成的。

环境准备

* 在CI服务器上安装Java和Android运行环境

* 安装构建工具,本文采用Ant进行实践

* 搭建好CI服务。本文采用开源的CI服务Jenkins(Hudson)。

* Jenkins在功能上完全能够满足功能上的需要,且简单易用。

* 安装Ruby环境。本文中使用的Functional Test测试工具是基于Ruby实现的。

步骤 1:持续构建

持续构建的目的是随时可自动化生成最新的可运行的App。虽然有这么多限定词来表示这一步完成的验证条件,但事实上只需要经过三个步骤即可完成。

一是更新代码,Jenkins中已经很好的支持了SVN和Git这两项常用的代码管理工具。二是采用构建脚本构建安装包,Android已经很贴心的连Ant构建脚本都为我们准备好了,并且因为Android的包结构的规范,也很大程度上消除各开发人员环境下项目机构的不一致。三是持续执行前两步,只有在每一次出现任何代码变动时立即执行前两步才能保证随时都可以提供可运行的安装包。

持续构建实现起来比较容易,但是它所达成的效果还是很不错的。对开发人员来说,都可以采用同一个脚本快捷的在本地生成安装包,这在很大程度上也减少了出现“这在我机器上运行的很好”的问题。对于测试人员,随时都可以获取最新的测试包,不需要再等待开发人员腾出时间来做这件事。对于产品人员,可以利用这些最新包,在开发人员完成后第一时间获得反馈。甚至可以在完成部分功能的情况下就开始体验了。

Best Practice:

* 在每一次提交后都对整个project进行构建。这里的提交应该包含任何一个微小的改动。

* 所有人遵循相同的构建顺序,采用同一套构建脚本

* 每次构建的时候都执行同一套脚本

步骤 2:持续测试

持续测试是快速的通过自动化的手段收集软件健康状况的方法。持续测试是为了验证构建完成的包功能是否可用,而不仅仅能够安装运行。对App的测试可以从UI,

Function, Code三个层次来进行,这三者间的权重关系可以参照测试金字塔来设计。

根据前文提到的优先运行最快的原则,这三个层次的测试,应该按照Unit Test, Functional Test,和UI

Test的先后顺序安排在CI执行。

1、添加Unit Test

Unit

Test是运行成本最低的测试,并且对于测试用例覆盖最为全面。鼓励尽可能利用单元测试覆盖用例。Java中的单元测试首选的还是使用JUnit,但Android

project的代码因为对SDK存在着极强的依赖,仅仅使用JUnit进行单元测试,能够覆盖的代码实在太少。为了解除对SDK的依赖,自然会考虑引入Mockito这样的Mock框架。但即使借助Mockito写单元测试的工作量依然巨大,因为需要mock的对象实在太多。并且Android的object在JVM中无法创建。

这时可以采用Robolectric单元测试框架,这将大幅度提升单元测试覆盖率,且理论上可以达到100%。Robolectric是以JUnit为核心,完成了对Android

SDK的stub。采用stub的方式后,Android的组件在JVM中即可创建并运行,无需在Android平台下运行。这也意味着在Android开发中可以采用TDD的方式,进一步提高单元测试覆盖率。该框架的使用JUnit完全一样,运行性能也一致。

由于Robolectric对SDK进行了stub,在写单元测试时完全可以对组件状态进行验证,甚至可以对组件进行操作。下面这个测试就是对button点击事件的测试,并且验证了Activity的状态。

CI中各个步骤执行先后顺序的安排,应该是执行时间较短的优先执行。执行时间短的一般在提交代码前就可执行,错误率也比较低,就应该尽可能先执行。这样失败会来得更早一些,每一次CI运行失败前验证完毕的东西更多。上图中CI的工作流,正是在这样的一个原则的基础上形成的。

步骤 1:持续构建

持续构建的目的是随时可自动化生成最新的可运行的App。虽然有这么多限定词来表示这一步完成的验证条件,但事实上只需要经过三个步骤即可完成。

一是更新代码,Jenkins中已经很好的支持了SVN和Git这两项常用的代码管理工具。二是采用构建脚本构建安装包,Android已经很贴心的连Ant构建脚本都为我们准备好了,并且因为Android的包结构的规范,也很大程度上消除各开发人员环境下项目机构的不一致。三是持续执行前两步,只有在每一次出现任何代码变动时立即执行前两步才能保证随时都可以提供可运行的安装包。

持续构建实现起来比较容易,但是它所达成的效果还是很不错的。对开发人员来说,都可以采用同一个脚本快捷的在本地生成安装包,这在很大程度上也减少了出现“这在我机器上运行的很好”的问题。对于测试人员,随时都可以获取最新的测试包,不需要再等待开发人员腾出时间来做这件事。对于产品人员,可以利用这些最新包,在开发人员完成后第一时间获得反馈。甚至可以在完成部分功能的情况下就开始体验了。

Best Practice:

* 在每一次提交后都对整个project进行构建。这里的提交应该包含任何一个微小的改动。

* 所有人遵循相同的构建顺序,采用同一套构建脚本

* 每次构建的时候都执行同一套脚本

步骤 2:持续测试

持续测试是快速的通过自动化的手段收集软件健康状况的方法。持续测试是为了验证构建完成的包功能是否可用,而不仅仅能够安装运行。对App的测试可以从UI,

Function, Code三个层次来进行,这三者间的权重关系可以参照测试金字塔来设计。

根据前文提到的优先运行最快的原则,这三个层次的测试,应该按照Unit Test, Functional Test,和UI

Test的先后顺序安排在CI执行。

1、添加Unit Test

Unit

Test是运行成本最低的测试,并且对于测试用例覆盖最为全面。鼓励尽可能利用单元测试覆盖用例。Java中的单元测试首选的还是使用JUnit,但Android

project的代码因为对SDK存在着极强的依赖,仅仅使用JUnit进行单元测试,能够覆盖的代码实在太少。为了解除对SDK的依赖,自然会考虑引入Mockito这样的Mock框架。但即使借助Mockito写单元测试的工作量依然巨大,因为需要mock的对象实在太多。并且Android的object在JVM中无法创建。

这时可以采用Robolectric单元测试框架,这将大幅度提升单元测试覆盖率,且理论上可以达到100%。Robolectric是以JUnit为核心,完成了对Android

SDK的stub。采用stub的方式后,Android的组件在JVM中即可创建并运行,无需在Android平台下运行。这也意味着在Android开发中可以采用TDD的方式,进一步提高单元测试覆盖率。该框架的使用JUnit完全一样,运行性能也一致。

由于Robolectric对SDK进行了stub,在写单元测试时完全可以对组件状态进行验证,甚至可以对组件进行操作。下面这个测试就是对button点击事件的测试,并且验证了Activity的状态。

接下来的工作就是将Robolectric集成到CI中,让它检查程序的健康状况。Robolectric本质上还是JUnit,只是多了一些stub 

对象而已。那我们集成Robolectric的方法和JUnit完全一致。只需创建Ant task,并在Jenkins中执行此task即可。此Ant task如下:

在将这些测试集成至CI后,最重要的一步收集结果是不能忘的。之前已经说过Calabash也可按照单元测试报告规范输出,加上Robolectric本身就是JUnit框架的扩展,报告也是按照单元测试报告规范输出。Unit

Test和Function Test的报告即可使用JUnit test收集。

要想获得单元测试覆盖率报告,Cobertura是个不错的选择。添加

从Jenkins上即可获得清晰的单元测试覆盖率的报告

2、添加Function Test

Android为大家提供了一套集成测试框架Android integration testing

framework。但此框架未集成Cucumber,这导致每增加一个Function Test都需要较大的开发和维护工作。这样高成本的实现Function

Test将大大延缓开发进度,最终因为项目进度的原因导致Function Test被丢弃。产生这样的后果那必然是不愿意看到的。

目前Android平台下已经出现多种Functiong Testing测试工具,如Native Driver, Robotium,

Calabash等。在尝试对比后,最终选择了Calabash Android作为解决方案。Calabash

Android是Cucumber在Android平台的实现,使用Ruby书写Function Test,并提供了一组操作Anadroid App元素的API。

3、添加UI Test

Android在新近退出了UI测试工具UIAutomator。此工具仅支持Android4.1及以上平台,鉴于目前市场上2.3和4.0版本仍占主导的情况来看,目前还无法满足大家的需要。另外应用该工具实现UI测试的开发成本还较高,笔者暂不推荐使用此工具,但应该关注其发展。

另外基于录制回放机制的测试方法同样可以进行UI测试。但录制回放的方法在面对功能快速迭代时,维护工作会急剧增加,而这个维护成本可以说是很难承受的,所以在此也不会将这种测试方法集成至CI中。

目前来看Android中UI测试还无令人满意的方法。若对UI成功比较看重,可以投入精力应用UIAutomator进行UI测试。

Best Practice:

*

将测试按照单元测试,组件测试,功能测试和系统测试进行划分。单元测试应该在每次提交时触发执行,其它的测试根据运行时间长短和重要程度可以每次提交触发执行或者定时周期执行。

* 将运行较快的测试优先执行。

* 让功能测试能够重复执行。否则维护成本太高,会被舍弃。若是后台数据导致不可重复,可以将数据抽象成为数据集,在每次运行前进行重置。

* 书写测试时每一个assert只做一种判断,这样可以明确每次测试的目的,并且可以快速定位测试失败愿意。

步骤 3:持续检查持续检查是对于代码本身检测和反馈。检测主要通过对代码静态分析验证代码风格,编程规范,代码复用,代码语言中的Best Practice等多个维度的代码质量。

Sonar作为一个开源的代码质量检测工具,涵盖了7项代码质量检测方式。这充分满足Android平台下对于代码质量的检测分析。Sonar分为两部分一部分是代码分析工具,另一部分是数据分析展示的Server。

Best Practice:

* 将测试覆盖率,代码分析结果透明化

* 持续降低代码复杂度

* 持续的促进设计的演进

* 持续的维护代码结构

* 持续减少代码重复

步骤 4:持续部署

由于Android App采用用户手动从Appstore自行下载安装的方式发布,使得Android

App无法直接部署至用户手机中。另外Appstore需要对于上线的App进行审核,不能持续进行Release。因而Android中持续部署将以持续发布可安装包为目标。

在以上目的下,只需根据自身项目资源找到合适的安装包管理工具即可。如本文采用Dropbox来管理所有安装包。

Dropbox作为一个云存储平台,在Android终端设备上可以轻松下载存放在其中的文件,同时上传安装包也可以交由Dropbox自己完成。

步骤 5:持续反馈

反馈是所有改进的开始,必须要让所有人获取到他们所关心的反馈信息,才能实施改进。持续反馈的目的就是让所有人都掌握项目健康状况。项目所有人事实都是有意愿知道项目当前的健康状况的,那CI就应该将项目的情况做到透明,并将不同的反馈通知到各相关的成员。

CI不同阶段产生了不同维度的反馈,如单元测试报告,测试覆盖率等。本实践中将这些反馈都透明的展示在项目首页中。之所以没有将这些反馈再以邮件的方式通知所有人,是因为团队成员已经养成了查看CI的习惯。

如果说只给所有人发一封邮件说明项目状况,那必然是告诉所有人“CI所有步骤是否都返回正确?”。这样一个反馈,包含了编译正确,所有测试通过,安装包已经准备完毕等重要信息。有必要让所有人都知道这个信息,特别是在CI执行失败的时候。Jenkins自身已经提供一个简单有效的透明化方法,以项目为蓝色表示通过,红色表示有步骤失败。

反馈的通知方式有很多种,不一定要采用邮件通知的方式。可以寻找更加有趣的方式,如果播放音乐和设置警报灯。在每一次Build成功或失败后都播放一段有趣的音乐,打开不同颜色的警报灯,这两种方法都是是一种简单有效的方式,可以让项目所有人都获取到最为关键的信息。