开始试用阿里云的 code 管理和 RDC

iOS 11, watchOS 4.0 各种升级,之后还有 macOS 的升级。

我一直很佩服 Apple 的项目管理,以前还略微空闲的时候,试图从外部来探究 Apple 是怎么进行这么复杂的项目管理的。当然后来也略明白,基本也是敏捷、多项目线、大量自动测试、功能尽可能的松耦合等。

之前几年公司一直用 jira 来管理项目,用的还不错,包括其中的敏捷项目管理。目前正在测试阿里云提供的 RDC 功能,比起 jira 来说,更加全面。并且 jira 有一个比较麻烦的就是,需要自己安装服务器,如果都是用 jira 云上的,速度性能有点不行。用阿里云 RDC 算是一个挑战吧,工具本身并不是最重要的,还是开发流程的再造重构本身压力很大。

最近先将两个大项目群中的几十个小项目从 svn 迁移到 git,算是 gitlab 的版本吧,然后在开发中继续使用 issue、milestone 来控制进度,wiki 来进行文档管理,项目本身还是要通过 unittest 以及 converage rate 来控制质量。不过还不是自动构建,每个 issue 的开发还是要人工来跑 unittest,并且 RDC 对于我直接带领的两个项目中使用的 Python 支持不是很好(对 Java 应该没问题)。还好,我们还不是迫切到需要每日构建和连续发布。

阿里云的 code 管理做的还算不错(应该就是 gitlab),git 我觉得建立本地分支和 pull request 流程都是非常不错的,养成习惯后,对于日常开发管理可以减少错误。习惯了 bitbucket 和 github 之类后,发现用 git 在国内的服务器速度要快了不少。

RDC 有专门的同事在做测试,两周后希望可以有一个实践心得,用在真实的开发项目中。

项目管理始终是一个大学问,是否做好,对于结果,天壤之辈。

因此多做一些记录,便于以后回顾和分享。

mac osx 下建立 python package 以及在github 上开源项目的操作过程

怎么建立一个 python 包,并且发布到 pypi,有很多文章介绍了。同样,怎么在 github 建立一个开源项目,也不难。

把这两个事情一起做,加上我用 pycharm 来辅助完成 python 包的建立,以及用 source tree 来管理 github 项目,事情可就不少了。

小结一下经验体会:

1 建立 python 包,网上大部分教程没什么问题,如果用 pycharm 会更加容易一些,在菜单 Tools 中,会看到 Create setup.py,pycharm 会做一些目录结构调整、生成最基本的需要的文件,以及输入版本作者之类的事情。

2 文件结构转换为包的形式后,pycharm 很聪明的会在菜单 Tools 中,增加一个 Run setup.py Task。可以节约一些工作量,比如 sdist,这是必须执行的,upload 上传也是必须执行的。不过这里有一个坑,在 sdist 执行好之后,就可以选择 install 命令安装自己的包,然后在程序里面 import 什么都可以了,但是如果这时候你想上传 pypi 可能会报错:

error: no dist file created in earlier command

 

当然,肯定已经在 pypi 注册过用户了,查了不少资料,原来是要先这样操作:

python setup.py sdist upload

 

没有在 pycharm 中找到相应的命令,在终端模式下输入吧。

然后就可以 upload 了。所以,如果你 upload 到 pypi 同样碰到上面的错误,不妨试试看先这样操作一下。

来源这个老外的博客文章,写的很有趣也很清楚。

补充:直接执行上面的命令,应该是连 sdist 和 upload 一起都运行了,这样是最方便的。

running sdist
running check
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)

writing manifest file 'MANIFEST'
creating fish_base-1.0.2
creating fish_base-1.0.2/fish_base
making hard links in fish_base-1.0.2...
hard linking README.txt -> fish_base-1.0.2
hard linking setup.py -> fish_base-1.0.2
hard linking fish_base/__init__.py -> fish_base-1.0.2/fish_base
Creating tar archive
removing 'fish_base-1.0.2' (and everything under it)
running upload
Submitting dist/fish_base-1.0.2.tar.gz to https://pypi.python.org/pypi
HTTP Error 500: Internal Server Error
error: HTTP Error 500: Internal Server Error

 

看这里的操作,当 upload 后,显示了错误的信息,但是到 pypi 上看,已经传上去了,略有奇怪,可能这里的网络不稳定。

3 github 中碰到的问题,就是 https 模式下,用户名密码始终通不过验证,然后换成用 ssh 证书模式,按照 github 上的操作是最靠谱的,并且他们区分了不同操作系统,个人私钥的文件名一定要叫 id_rsa,反正我这里不叫这个就是通不过。
严格按照 github 上的步骤,以及测试 ssh 是否通顺的方法,如果不能通过,肯定是不能用的。

4 在项目的 .git 目录下,有一个 config 文件,可以修改其中的 https 模式到 ssh 模式。

5 osx EI Capitan 在 Finder 中显示隐藏信息的方法和之前版本有所改变:

defaults write com.apple.finder AppleShowAllFiles -bool true
killall Finder  

 

关键是后面那句。

source tree 作为一个免费强大的版本管理软件,没什么好说的,使用起来也很方便。

好了,我要修改代码了,为了试验,所传的项目代码都很烂,需要好好修改一下。

使用git管理develop分支心得之一

git的分支管理是最强大的,所以我们也尝试去用。当然一开始用的有点乱,并且我有一台work computer和一台home computer,我经常通过git在两台电脑之间保持连续性工作,最简单的办法是用master分支,不过那样太对不起git了,经过了很多尝试之后,发现我两台电脑的分支、tag已经不一致了,加上其他人使用的,所以服务端上也是另外一个样子。

这时,正好看得到这篇好文章,讲述了用master和develop两个分支,通过tag来管理版本等一些非常棒的git使用方法总结。

但是对于我这样git命令很不太懂的人,加上git本身一些比较奇怪的用户体验(我甚至觉得这就是linux的问题,所以现在用的人是越来越少了),折腾了很久,终于搞定了。

我的应用场景是所有这些介绍文章中没有提到的,就是我已经弄乱了分支,现在想用开发develop分支,发布时候合并到master,并且有好几台电脑(相当于好几个用户),同时我主要用的是tortoise git,因为几乎是图形化的操作,很容易。

1 删除git服务器上所有不需要的分支,不管是bitbucket或者github都有这个功能,先把主控弄干净。
2 按照阮的blog中介绍的,在本地一台电脑上,创建develop分支:git checkout -b develop master
3 切换到这个develop分支,git checkout develop
的确在git gui中打命令比较快和方便,用图形化界面肯定可以,但是一些参数万一弄不好就麻烦了。
4 在这台电脑上开发,修改代码等等,全部弄好了之后,上传,就用右键的上传命令,肯定是 Git Commit… -> ‘develop’,也就是当前修改的会传到develop分支
5 换一台电脑,如果这个computer B之前也像我弄的分支很多,并且已经不怎么同步的了话,可以这样做,先 pull 最新的版本,在pull的窗口里,分支名称可以自己输入的,然后我碰到的奇怪问题就是拉下来之后在本地并不是develop分支,本地还没有建立过,用git命令切换也没用。
6 google了一下,这样子操作,先切换本地到master,然后把不用的分支全部删除,然后用git fetch命令,就拿到了服务器上最新的分支情况,现在是干干净净的master和develop了,然后用前面的git checkout develop就可以了。

说实话,没有好好去弄懂git的原理,也不太想懂那么多,只要实战会就可以了,愚人之见。