本文共 9846 字,大约阅读时间需要 32 分钟。
转自:
首先需要介绍一些基础的概念,这里只是简要的介绍,比较详细的介绍,可以参见 期待有人能够将其翻译为中文。(或者已经有中译本了,欢迎告知我。)
源代码( ) :也就是通常一个软件,由程序员编写,并且可以被其他程序员阅读的,可以被直接执行/或编译后执行的文本代码。
源代码管理与版本控制( ) :由于源代码数量的急剧膨胀、变更的越来越频繁、可能修改同一个源文件的人也越来越多,需要将这些代码管理起来,于是每次变更被称之为一次修正 (Revision)。版本控制更准确的说法应该是“Revision control”,每当我们修改一个源代码文件并再次保存时,就出现了两个不同的版本,一个是修改前的,一个是修改以后的。而版本控制,就是确保源文件的 每一次修改,都被记录下来,并且可以知道是被谁修改的,是因为什么原因而修改的。必要时,可以找回任何一个版本的源代码。 软件版本号( ) :这里的版本,是另外一个概念,源代码中的任何一个文件,都存在一个修订版本号,而作为整个软件,无论对内称呼还是对外发布,都需要一个更加正式的,完整 的版本号。前者的英文是Revision,而后者的英文是:Version。因此,当我们谈到版本管理的时候,很可能是同时谈到两者:一个是源代码的 Revision,一个是整个项目的Version。 版本控制工具( ) :为了帮助更好的管理源代码,程序员们开发出了林林种种的版本控制工具,有闭源的,也有开源的。而现在市面上流行的,已经几乎全是开源的了。简单的列出几种在下面:取得源代码的方式千千万万,现在有越来越多的开源项目,已经开始逐步采用规范的,统一的方式,提供自己的源代码以供下载,但是在开源项目发展的早 期,还有很多是以并非规范的方式提供的。而在寻找一些开源项目的源代码时,google与wikipedia,将会是我们的好帮手。当然,还有更早期的一 些开源项目,就是在邮件列表里发一个带附件的邮件,要找到那种项目的源代码,就得有考古的功力了。
这里举一个例子,来描述一下我寻找某一个开源项目源代码的过程。
有一个项目叫做GForge,在早期还是一个较为著名的开源托管平台的项目,这个托管平台的代码本身也是以GNU许可开源的。假设,我首先是在wikipedia上发现了这个项目:
看到这个项目的介绍,大概我觉得不错,于是我就看到下面的External links,列出了四个外部链接:一个比较合理的猜测,自然是首先访问 因为这个项目托管在自己的开源平台上,应该是顺理成章的。进入这个页面之后,我迷惑了一下,他竟然是一个中文界面,里面有文件、档案发行和SVN三个疑似可以下载的地方。经过试错,我发现:文件里没啥东西。SVN的存取信息里告诉我,可以svn checkout 获得最新的源代码。而在档案发行里,我发现了各个 而最新的那个5.0版本并非一个压缩包,而是一个txt文件,里面告诉我:GForge项目已经被全部重新设计和重写,目前可以在 这个项目里看到。另外,如果要下载最新的版本,可以到
而如果要下载早期的版本,那么历史版本列表的那些gforge-x.x.tag.bz2,就可供我挑选了。
更加糟糕的情况也许会需要我们在google里搜索:“XXX source code download”这样的关键字,才能找到,这里不再赘述。
基本上,如果想要开始使用并深入掌握这三种版本管理工具的其中一种,都可以由此入门,并最终融会贯通。
SVN如何获取代码
如果你在windows平台下,推荐安装 然后,就在图形界面下简单操作。
填入SVN来源URL,直接CheckOut出最新的版本(HEAD revision),或者选择某个具体的版本(Revision),选择CheckOut的目录即可。
如果你在linux/mac平台下,那么命令行会非常方便:
svn checkout 获取最新的版本 svn checkout --revision {....} 获取某个版本 svn checkout 获取上某某tag的具体发行版本Git如何获取代码
如果一个git管理的项目放在github这样的成熟项目托管平台,获取代码是非常简单的,而且网站还会有详细的操作指南,教你一步一步的如何操作。
至少,你可以先参照 ,搭建自己的git开发环境。
然后,获取代码也极其简单:
git clone GitRepoURL
Mercurial如何获取代码
正如GitHub是主打Git的开源托管平台, 则是一个主打Mercurial的开源托管平台。因此,我们可以在这里找到关于Mercurial的操作指南。而因为Git的飞速发展,现在BitBucket也开始同时支持Git,所以在 ,可以同时看到两种工具的安装指南。
hg clone HgRepoURL
即可获得Mercurial仓库的完整副本。(Mercurial又简称为hg)这是新增的一个小节,因为在很多动态脚本语言中,都有类似的包管理工具,在wikipedia中有一个词条 ,其中的Application-level package managers小节,就介绍了十多种不同语言的包管理工具。
想要更进一步的了解软件包管理系统,可以阅读与过去的很多开源项目不同,这种脚本语言的包管理工具实在是方便,一行命令,连下载,带安装、就都有了。本章4.2节的让代码运行起来里,会举几个这样的例子。这里就不再赘述了。
Application-level package managers语言 | 包管理工具 | 相关文档与资源 |
Perl | ||
PHP | ||
Ruby | ||
Java | ||
Python | ||
NET | ||
NodeJS |
经过思考,决定将这一小节以实例的方式写出。也欢迎大家补充各种不同语言的how to install。
在Windows环境下 推荐安装
进入下载页面,选择一个ruby版本,比如 下载、运行安装即可。在Linux/Mac环境下 推荐安装
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)ubuntu下,将下两行中的.bash_profile改为.profile$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile$ source ~/.bash_profile$ rvm requirements根据提示,安装其他必要的软件包$ rvm install 1.9.3$ rvm use 1.9.3
安装一个开源项目
$ gem install sinatra
搞定收工。。。
如果没有安装过rubygems这个包,则会困难一些。首先在 这个页面挑一个文件格式下载,并解压缩。然后:
$ cd directory$ ruby setup.rb
搞定收工。。。
参考:
在WIndows环境下 推荐安装WAMP(Windws+Apache+MySQL+PHP)套件,
在Linux环境下 以下将简单介绍在Ubuntu下安装LAMP的过程,其他的linux平台以及Mac平台,请自行搜索。$ sudo apt-get install mysql-client mysql-server根据提示,输入两次MySQL的root密码。$ sudo apt-get install apache2在浏览器中访问 http://localhost,应该可以看到It Works等文字。表明Apache2安装成功。$ sudo apt-get install php5 libapache2-mod-php5 libapache2-mod-auth-mysql php5-mysql$ sudo /etc/init.d/apache2 restart #重启Apache服务器,完成配置PHP的工作$ sudo vim /var/www/info.php将以下内容写入文件 在浏览器中访问 http://localhost/info.php 应该能够看到PHP的版本及模块说明等内容。这样就表明,Linux+Apache+MySQL+PHP已经配置完成了。
安装一个开源项目 以在Ubuntu上安装一个wordpress为例
$ wget http://cn.wordpress.org/wordpress-3.3.1-zh_CN.tar.gz #需要寻找最新的版本$ tar -zxvf wordpress-3.3.1-zh_CN.tar.gz$ mysql -uroot -pmysql> CREATE DATABASE IF NOT EXISTS wordpress default charset utf8 COLLATE utf8_general_ci;mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost' IDENTIFIED BY 'wp_password' WITH GRANT OPTION;mysql> exit$ cp wp-config-sample.php wp-config.php$ vim wp-config.php(最主要是修改以下四个值的定义)define('DB_NAME', 'wordpress');define('DB_USER', 'wp_user');define('DB_PASSWORD', 'wp_password');define('DB_HOST', 'localhost');
在浏览器中访问 按提示完成各个步骤,就搞定了,整个时间不超过5分钟。
最后一句的提示,很有趣味:“WordPress 安装完成。您是否还沉浸在愉悦的安装过程中?很遗憾,一切皆已完成! :)”在Ubuntu下以源代码方式安装Tomcat
$ wget http://apache.etoak.com/tomcat/tomcat-7/v7.0.27/src/apache-tomcat-7.0.27-src.tar.gz #寻找最新版本$ tar -zxvf apache-tomcat-7.0.27-src.tar.gz$ cd apache-tomcat-7.0.27-src$ vim BUILDING.txt # 阅读编译指南,按照指示操作$ 下载 jdk-6u31-linux-x64.bin #tomcat7.0.x的源代码编译,要求jdk6的版本,jdk7在编译时,会报错$ cd$ ./jdk-6u31-linux-x64.bin$ export JAVA_HOME=~/jdk1.6.0_31/$ wget http://apache.etoak.com//ant/binaries/apache-ant-1.8.3-bin.tar.gz$ tar -zxvf apache-ant-1.8.3-bin.tar.gz$ export PATH=%PATH:~/apache-ant-1.8.3/bin:~/jdk1.6.0_31/bin$ export ANT_HOME=~/apache-ant-1.8.3/$ cd apache-tomcat-7.0.27-src$ ant$ cd output/build/bin/$ ./catalina.sh run
至此,在浏览器中,访问 可以看到Tomcat的欢迎页。
在Ubuntu上安装Python Django
$ wget https://www.djangoproject.com/m/releases/1.4/Django-1.4.tar.gz$ tar -zxvf Django-1.4.tar.gz$ cd Django-1.4$ sudo python setup.py install$ python>>> import django>>> django.VERSION(1, 4, 0, 'final', 0)
到这一步,Django就算是安装完成了。太简单了,我们还得再用这个Django干点什么。
$ django-admin.py startproject newtest$ cd newtest/newtest$ vim helloworld.py#File Beginfrom django.http import HttpResponse def index(request): return HttpResponse("Hello, Django.") #File End$ vim urls.py#File Beginfrom django.conf.urls.defaults import *urlpatterns = patterns('', (r'^$', 'newtest.helloworld.index'), )#File End$ cd ..$ ./manage.py runserverValidating models...0 errors foundDjango version 1.4, using settings 'newtest.settings'Development server is running at http://127.0.0.1:8000/Quit the server with CONTROL-C.
这是,用浏览器访问 你将看到
Hello, Django.现在的JavaScript发展的确飞快,已经不仅在浏览器里可以使用了,这里先简单介绍一下服务器端的node.js的安装与使用。
在Ubuntu下安装node.js、npm与express.js
首先确认GCC编译环境的正确安装,否则请:“apt-get install build-essential”$ wget http://nodejs.org/dist/v0.6.15/node-v0.6.15.tar.gz$ tar -zxvf node-v0.6.15.tar.gz$ cd node-v0.6.15$ sudo apt-get install libssl-dev$ ./configure$ make$ sudo make install$ node -vv0.6.15$ curl http://npmjs.org/install.sh | sudo sh$ npm -v1.1.18$ npm install express$ vim test.js#File Beginvar app = require('express').createServer();app.get('/', function(req, res){ res.send('Hello World!');});app.listen(3000);#File End$ node test.js
打开浏览器,访问 将看到
Hello World!因为王越的系列文章《Mac OS X背后的故事》,其中第八章《 》对LLVM的介绍,使我决定尝试把LLVM,作为c语言的hello world项目。
说实话,在开源项目中,C语言的各种开源项目的编译安装,都是非常类似的。绝大多数命令都是一下三行:
$ ./configure$ make$ make install
当然,在windows下,会麻烦得多。LLVM的安装也非常简单,命令如下:
$ cd where-you-want-llvm-to-live$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm$ cd llvm/tools$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang$ cd ../projects$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt$ svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite$ cd ..$ mkdir build$ cd build$ ../configure$ make$ make check-all$ make update$ make install
然后,我们可以尝试用LLVM的编译工具链,来编译c语言的代码。
创建一个文件hello.c#includeint main() { printf("hello world\n"); return 0;}
编译hello.c,得到hello
$ clang hello.c -o hello
编译c代码,得到LLVM的bitcode文件。
$ clang -O3 -emit-llvm hello.c -c -o hello.bc
第一行以普通方式,执行编译好的可执行文件,第二行调用LLVM JIT,命令为lli,来执行LLVM的bitcode。
$ ./hello$ lli hello.bc
更多内容可以参考:
1. 仔细看文档
LLVM的文档很有意思,在他开篇头三条是:1. Read the documentation. 2. Read the documentation. 3. Remember that you were warned twice about reading the documentation. 是的,认真的,非常认真的阅读相关文档,是最重要的方法。其他的一切方法,都是排在这个后面的。 当 然,文档的正确性和完整性,也是可以怀疑的。有很多开源项目,往往存在文档bug、文档版本与代码版本不同步等问题。比如LLVM的安装文档,也并非完全 正确,我到现在都还不明白,在1.2.3.条那么正经的提示之后,他的第8条,只有configure、make、make check-all、make update,居然没有make install! 但是,先看文档,尤其是项目本身的文档,而非二手、三手文档,是必须的第一步。