在上一篇文章里,描述了如何在服务器配置自己的 Git Server,作为系列文章第二篇,这次我们来说一说使用Git 遇到的一个问题。
很多开发者喜欢使用命令行来进行版本控制,看起来很炫,特别是在妹子面前,显得很高深有没有。我其实也想炫一下,可惜记不住命令,所以还是用 GUI 界面来吧。
SVN 客户端我使用的是 TortoiseSVN,好在 Git 客户端也有一个类似的就是 TortoiseGit。
首先在目录里,右键选择克隆,然后输入 URL 地址,剩下的就是日常用法了,该怎么用大家各自搜索去。我想说的是保存用户名密码这个细节。
TortoiseSVN 在第一次签出的时候,会有对话框让你输入用户名密码,同时提供一个选项是记住密码。这样每次提交什么的,就不需要再输入了。而TortoiseGit会每次操作的时候,都让用户输入用户名和密码,并没有提供记住密码的功能。这是在调戏各个开发者的节奏哇。
于是我搜索了下解决方法,并在这里和大家分享出来。一共有3种:
第一个方法,如网上所述,先添加一个环境变量,例如 Home,值为 %USERPROFILE%,接下来在 C:\Users\[当前用户名] 路径下创建一个名为 _netrc 的文件。其实呢, %USERPROFILE% 就是等价于 C:\Users\[当前用户名] 目录。用记事本打开 _netrc 文件,输入下面的内容
machine github.com #git服务器名称
login user #git帐号
password pwd #git密码
保存即可。
第二个方法,比这个简单点。项目目录右键打开 TortoiseGit的设置对话框,Git 节点,选择“编辑本地.git/config”,然后增加两行内容就可以了。
[credential]
helper = store
保存即可。事实上这个方法,会在 C:\Users\[当前用户名] 目录下创建一个名为 .git-credentials 的文件,里面就是保存了用户名和密码。
需要强调的是,上面的两种方法都是明文保存的,所以安全性大家可以看着办。
Visaul Studio 是我用的最频繁的开发环境了。最新的版本是 2013,同时在这个版本里,微软添加了对 Git 的支持。所以就有第三种方法,在 VS 的团队资源管理器中,可以设置项目的 Git 属性,这里是可以记住密码的喔。个人猜测用户名密码是放在 VS 的相关配置里,所以应该看不到明文,起码我没有找到明文保存的路径。如果说大家使用的是 VS 之外的开发环境,可就不那么容易了。
最近看到好些个前端开发的职位,可惜我心有余而力不足。
先来说一说背景。最近一直在加班陪着忙一个项目。项目开始的时候,说是来了一个牛人,很有个性。对于项目的版本控制,坚持要用git。人家用git,是把代码给提交到 Github 上面。
一来,我们这边从上到下都习惯用SVN,版本控制服务器也是个windows服务器,而git server 大部分是linux系统。另外一点,商业项目放在Github上,管理层有些担忧。后来,双方的PM都给那个牛人做工作,在压力下人家最后同意使用svn。
于是项目就开工了,最近一个月周末不休息都在加班。不过这个倒是题外话了。
我一直就在琢磨如何架设自己的 Git Server这个事情,SVN Server 我用的是免费的 VisualSVN Server,一直希望有个类似的window平台上的 Git Server。这么些年来,我习惯了 GUI 的操作,始终觉得 linux 的命令太难以记忆。如果有一个简单的软件在windows服务器上运行,并且有界面配置,简单容易操作,那该多好。
在网上搜索了一把,貌似很多都是在 windows 下模拟的 linux 环境,然后 ssh 登陆什么的。违背了简洁的原则,有这个折腾的功夫,我还不如就用linux服务器呢。昨天终于无意间被我搜索到一个开源的东西,可以满足我的要求了。
主角出场,那就是 Bonobo Git Server。

这个应用的官网是http://bonobogitserver.com/
下载地址是:https://github.com/jakubgarfield/Bonobo-Git-Server
首先允许我来介绍下这个应用,它是运行在 IIS 下的使用 MVC3+ 的网站。网站本身使用了SQLite 存储,然后 git 方面是调用的其它组件。
相比其它的方式,有什么优点呢?首先不需要各种模拟linux环境,原生的。另外VisualSVN Server 还自带安装apache,而 Bonobo Git Server直接使用 IIS,感觉更爽。
下载解压缩,然后添加到 IIS 里,记得使用 netframework 4.0 应用池,为该网站添加一个域名就可以了。安装完成后,访问网站,输出初始用户名和密码 admin,即可登录。当前的版本已经支持多语言了。
进入了管理界面,首先要做的是修改全局设置。修改库目录为服务器上的目录文件夹,记得该文件夹要有写权限。至于是否允许匿名提交、匿名注册什么的,大家就根据实际情况设置吧。
全局设置完毕,再来设置用户,强烈建议大家修改admin的密码。同时再创建一个个人用户,admin 用来管理这个网站,而新建的个人用户则用来代码的提交。用户信息里有一个邮箱项,建议填写真实的邮箱。
然后就是库设置,新建一个库,设置权限什么的,有中文界面,很简单的,就不细说了。创建完成后,点击库,就可以查看库的 URL 地址了,这个地址就是版本控制的地址。
至此,服务器端的设置就完成了。大家可以开发使用了。
在发布了新的 ios 7 系统后,发现导航栏会占据视图的位置,如果应用是在6 和7 上都有用户的话,那么就需要做兼容适配。
网上有看到2种方法。一种是设置 UINavigationBar的translucent属性,self.navigationController.navigationBar.translucent = NO;
另外的一个方法是设置边沿延伸的属性,但是需要先获取判断系统的版本,代码如下:
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 7.0) {
self.edgesForExtendedLayout = UIRectEdgeNone;
}
在查看文档的时候,发现有段文字提及UINavigtaionBar的高度会自动根据实际情况变化为 44 或者64,没有确定的预测方法,如果对 UINavigationBar 有设置背景图片的话,按照别人的经验,最好是用一个64高度的图片,上面的20像素设置为透明的。更具体的内容可以查看这里。
这个中秋节算是运气比较不错的。超市有活动是猜灯谜的,最后还中了6只笔,什么谜语忘记了,只记得有一个是柴门闻犬吠,打一字,谜底是个润。
买东西结账时,刷的信用卡,居然提示中奖了,赶紧去兑奖,是一个50块钱的充值卡,还不错。
后来又买了一套西服,结账时说可以换一捅金龙鱼的油,捡了个便宜。
最后东西买完了,说单张小票超过多少钱就可以抽奖,什么珠宝、美妆类的还不参与,恰好有一个满足,于是就摸了下,中了个二等奖,选择了一个双人帐篷,olay 美的不得了,人家是一直想去搞个露宿什么的,现在就多了一件装备了。
从超市出来,说运气这么好,就去买个彩票,就买了几张刮刮奖,居然有一张中了个 500 块,那一本刮刮奖里估计就再也不会有什么大奖了。
一个下午,就中了5种奖品,运气还真不错。不过买东西也花了老多钱了。
前几天被人给问到了chunked,电话中怎么都没有听清是什么单词,以为是 truck ,心道前端里哪里有这个词汇,被人家狠狠鄙视了一把。电话挂了后才各种搜索,终于知道原来人家说的不是truck,而是 chunked 。
这是做什么用的呢。在服务器端需要做长时间处理例如一个耗时操作、大文件下载等行为时,可以先返回一些数据,并告诉客户端,这只是部分数据。客户端就可以先拿这部分数据做些事情,比如 UI 呈现等等。
查看的方式也很简单,就是看response 的 header ,里面有 Transfer-Encoding ,其值为 chunked。报文体据说是由四段chunk、last-chunk、trailer和结束符组成。当每个chunk 以0开头,则表示长度为0,是最后一个chunk,既last-chunk。结束符号就是CRLF咯。每个chunk 由2部分组成,并由CRLF分隔,第一部分是长度和长度单位(单位一般不写),另外一部分是具体的内容。长度是用的16进制编码的。
对于后端来说,我看网上有说法是,Response.Write方法即是,我更倾向于在Write方法后使用的 Response.Flush()方法。
周末的时候刚把应用的 ios 给上架了,接着他们就问我什么时候出安卓的版本。好久都没有再打开eclipse,安卓的开发我几乎都忘记完了,看样子要重头再来了。
安装好最新的更新,新建立了项目,发现无论是 官方的模拟器还是我那可怜的魅族M9,调试都很慢。慢到什么程度呢,从我按下调试按钮到应用的界面被显示出来,需要35秒+的时间。而我又是那种猜测编程式的,简直很崩溃。
在微博上抱怨了一番,结果表弟发了个关键词 Genymotion,我一查,是一个第三方的android 模拟器,果然不错。这里就推荐给大家,虽然我的这个空间几乎没有多少观众。
首先,需要去 http://www.genymotion.com 去注册一个帐号,这个帐号在后续中会使用到。注册并激活帐号后,就可以下载了。
然后,需要下载安装 vitual box 软件,下载自己对应的操作系统版本就可以了。
接下来,安装上面的2个软件。
第四步,打开eclipse,安装新插件,插件地址是http://plugins.genymotion.com/eclipse/。安装完成后,打开eclipse的选项菜单,里面就有genymotion的配置项,设置 SDK 的目录,以及代理什么的。
运行 genymotion ,创建虚拟设备。接下来就可以开工运行了,非常的方便。
这里我没有写更具体的,因为我觉得对于常见的 windows 和 mac 平台,是非常傻瓜式的,几乎不需要思考。
友人服务器最近到期,准备迁移到阿里云上面。
买好了云服务器后,就开始部署,结果一直报错。说不是有效的32位程序,由于网站的登陆页面使用了加密狗,而报错的就是这个加密狗相关的dll 文件。在IIS 里添加了对32位程序的支持,还是不行,错误提示说是无法加载指定的模块。
后来想到加密狗dll 是用c++开发的,是不是缺少相关运行时导致。不清楚dll是用c++的哪个版本开发的,只好把05、08、12的32/64位运行时都下载了安装。
还是不行。
有点小崩溃了。想到既然是无法加载指定的模块,那应该是缺少模块咯。又用depends查看加密狗dll引用了哪些系统dll。发现引用了msvcr71.dll和mscoree.dll,把这2个dll 从别的电脑上复制到服务器上。运行又报错,不过错误提示发生了变化。
说是 c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\946055b8\92eead15\xxxxxx.dll 拒绝访问。
开始以为是这个目录的权限问题,添加权限还加不上去,估计server 2008 默认是不允许的。后来查询了下,很多人说是需要给系统临时目录添加权限,果断给 temp 目录添加了 network service 权限,发现还是不行。
反复搜索,终于解决,原来是需要在应用程序池设置中将“加载用户配置文件”(Load User Profile)设置为true。
再次运行终于正常出现页面了。接下来又是数据库无法登陆,这个按照网上是说明,选择附加进来的数据库,右键属性,如上图,文件–〉所有者–〉选择用户sa,即可用此sa用户登录数据库。
弄好了这些,都深夜2点多了。
7月份都过去大半了,今天才来写这个月的博客。今天可以来说一说最近发生的一件事情。
这个月,除了玩了很多的LOL外,就是写一个小应用了。某一次在威客网站上接了一个iOS的活,人家已经有android 的版本了,想再来一个iOS的,功能都比较简单。人家问我要多少钱,我很不自信,因为才学习iOS开发没有多久,所以准备说200块。然后又一狠心,又加了50块。
接着就轮到人家不相信了,我想如果从事开发的同学就知道,这个价格是非常低的了。在人家质疑能力的时候,幸好前不久在store上架了一个html5介绍的应用,于是人家也没有多说什么,当然这么低的价格也让人家最终选择了我。
当然最后结果还是不错的,人家主动说250块太低了,然后给加到350块了,后来觉得和我合作很舒服,于是又给添加了350块。虽然钱真的不多,也就一顿饭的支出。但那种被认可的感觉,真的很爽。
因为这个事情,妹子把我说了好几顿了。正所谓万事开头难嘛~再接再励好了。
今天拿到一个 pad mini,所以就想看看糗事在pad 上运行的效果是什么样子的。先在网页上添加了设备的唯一编号,然后运行。结果就报错,弹出错误提示为 “a valid provisioning profile for this executable was not found”。
网上查询了下,大致都是说证书的问题,我印象只是记得在 xcode 的界面中曾提示过什么密码不正确。后来又查看了 provisioning profile ,发现果然没有选择新添加的设备。勾选并重新生成证书,下载安装。问题解决了。
第一个iOS应用终于上架了。这是一个分享传播html5知识的简单应用。历时3个月,被拒绝了5次。通过审核时,真是感觉泪流满面啊。
由于E文水平很菜,当初想了解下苹果从开发到上架的整个流程,于是就想写一个简单的应用尝试看一看。我的很多朋友都是在做前端开发,所以就选择以 html5 作为切入点。
其实最头疼的是没有设计参与进来,所以界面简单而且丑陋。苹果的审核是很严格的,对于不会做设计的我来说,实在是有点难为我。由于程序功能简单,网上很多的界面都只有参考意义。
后来有一次看到微博上一个讲述统计的图片,有点感觉,于是使用了四叶草的变形。也恰好符合程序的几个功能菜单。在最开始的版本里,有放一个广告墙的推荐。被拒绝后在原因描述里说违反了苹果的策略。按说在应用里放广告是很正常的事情,不知道为什么会拒绝。只好给移除掉。
位置是空闲出来了,但是接下来要考虑填充的内容,恰好在看一个 cover flow的特效,那天在家在翻阅一本前端开发的书籍,当时就决定使用这个特效来推荐一些关于 html5的书籍。于是也就有了现在的样子。
应用最初出发点是想熟悉流程的,被苹果拒绝后,看着页面上显示 reject 字样,有点强迫症的我,又开始不甘心了,坚持要给做到通过。是的,最后我坚持下来了,不知道是不是因为他们的审核团队比较烦我才给通过的。
丑是丑了点,我接受各位同学的鄙视,不过你们谁有比较好的设计资源,一定要告诉我呀。