VersionControl – 夏清然的日志 https://www.qingran.net Xia Qingran Geek Blog Sun, 07 Aug 2016 09:50:33 +0000 en-US hourly 1 https://wordpress.org/?v=4.6.1 112893047 Trac、Mercurial集成项目管理工具组建 https://www.qingran.net/2011/01/trac%e3%80%81mercurial%e9%9b%86%e6%88%90%e9%a1%b9%e7%9b%ae%e7%ae%a1%e7%90%86%e5%b7%a5%e5%85%b7%e7%bb%84%e5%bb%ba/ https://www.qingran.net/2011/01/trac%e3%80%81mercurial%e9%9b%86%e6%88%90%e9%a1%b9%e7%9b%ae%e7%ae%a1%e7%90%86%e5%b7%a5%e5%85%b7%e7%bb%84%e5%bb%ba/#respond Thu, 13 Jan 2011 04:12:34 +0000 https://www.qingran.net/?p=775 我们的项目已经进行了半年,马上进入了第3个季度,慢慢的需求管理、缺陷管理的建立也需要提上日程。

从走在前面的3D引擎的开发状况看,需要有一个良好的bug管理系统来管理bug、记录需求等,于是决定用一个项目管理工具来实施,直接上Trac,并且要做到和我们的开发的版本管理工具Mercurial完全集成,Mercurial的安装见链接

首先ubuntu的apt reposity里只有trac 0.11.7,所以需要下载trac-0.12.1,导致一些安装需要手工安装。

使用0.12.1在于支持i18n,支持多个source reposity等,并且基于0.12版本的plugin较多。

[准备工作]

系统是ubuntu 10.04 LTS。

首先安装trac所需要的支持环境,采取先安装trac,然后再移除的方式安装依赖包:
apt-get install trac && dpkg -P trac

安装Genshi 0.6版本(下载),trac 0.12依赖此:
tar -xvzf Genshi-0.6.tar.gz && cd Genshi-0.6 && python setup.py install

安装Trac 0.12.1:
tar -xvzf Trac-0.12.1.tar.gz && cd Trac-0.12.1 && python setup.py install

[配置apache2]

目前使用mod_python方式运行trac,wsgi方式配置Trac mainnav一直出不来,很郁闷:(
apt-get install libapache2-mod-python

因为是通过 http://ipaddr/trac 访问的,修改/etc/apache2/sites-available/default,加入以下内容:

<Location /trac>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonInterpreter main
PythonOption TracEnv /data/trac/core-trac
PythonOption TracUriRoot /trac
SetEnv PYTHON_EGG_CACHE /tmp
AuthType Basic
AuthName "core trac password"
SetEnv PYTHON_EGG_CACHE /tmp
AuthUserFile /etc/apache2/hg.passwd
Require valid-user
</Location>

初始化trac库:
cd /var/www && mkdir trac && trac-admin trac/ initenv && trac-admin trac/ permission add xiaqingran TRAC_ADMIN

指定TRAC_ADMIN用户:
trac-admin trac/ permission add xiaqingran TRAC_ADMIN

[配置trac]

首先配置用户的trac权限,觉的命令行麻烦就用webadmin来吧。

配置mercurial,在trac中能浏览mercurial中的代码,能在commit代码的时候自动close ticket,并且把diff加入提案:

安装mercurial-plugin:
svn co http://svn.edgewall.com/repos/trac/plugins/0.12/mercurial-plugin
制作egg文件:
cd mercurial-plugin && python setup.py bdist_egg

进入webadmin界面,然后再plugin选项里安装刚刚生成的egg mercurial-plugin/dist/TracMercurial-0.12.0.23dev_r9953-py2.6.egg

重启apache2,刷新页面,看plugin是否enabled。

同时在plugin里把Trac 0.12.1里把tacopt.ticket.commit_updater.*下的插件打开,同时把TracMercurial里的所有插件enable。

进入WebAdmin -> Version Control -> Repositories加入相关的版本库,名称为client,版本库类型是hg,目录就选在在服务器上的hg目录。

[配置mercurial]

设定mercurial的hooks,使其在hg push时能同步修改trac,编辑hg服务器端的.hg/hgrc,加入以下两段:
[hooks]
commit = trac-admin /var/www/trac/ changeset added client %HG_NODE%
incoming = trac-admin /var/www/trac/ changeset added client %HG_NODE%

mercurial提交的时候按照此格式编写commit log:
- *Fixes #123* - to reference this changeset and close #123 ticket with the default status *fixed*

完毕,enjoy it.

]]>
https://www.qingran.net/2011/01/trac%e3%80%81mercurial%e9%9b%86%e6%88%90%e9%a1%b9%e7%9b%ae%e7%ae%a1%e7%90%86%e5%b7%a5%e5%85%b7%e7%bb%84%e5%bb%ba/feed/ 0 775
Git使用手册 https://www.qingran.net/2010/12/git%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/ https://www.qingran.net/2010/12/git%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/#respond Wed, 22 Dec 2010 06:04:37 +0000 https://www.qingran.net/?p=750 在网上Google到的一份中文的《GIT使用指南》,读了一下非常好,在此转载一下,感谢译者。

]]>
https://www.qingran.net/2010/12/git%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/feed/ 0 750
Git server安装笔记 https://www.qingran.net/2010/12/git-server%e5%ae%89%e8%a3%85%e7%ac%94%e8%ae%b0/ https://www.qingran.net/2010/12/git-server%e5%ae%89%e8%a3%85%e7%ac%94%e8%ae%b0/#comments Sat, 18 Dec 2010 14:06:29 +0000 https://www.qingran.net/?p=734 因为Mercurial缺乏对100MB+的binary文件支持,所以今天又把Git装上测试一下,环境是在一台Ubuntu 10.04 amd64 server edition机器上,通过http访问Git。

首先升级系统到最新:

#apt-get update && apt-get upgrade

安装Git

#apt-get install git git-core gitosis
#mkdir /var/www/code.git && cd /var/www/code.git
#git --bare init && git update-server-info
#chown -R www-data:www-data .

配置Apache2

#apt-get install apache2 apache2-mpm-prefork

在/etc/apache2/conf.d中加入git.conf

<Location /code.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>

重启apache2
# service apache2 restart

Done.

参考文档 how to setup a git server – The Linux Kernel Archives

]]>
https://www.qingran.net/2010/12/git-server%e5%ae%89%e8%a3%85%e7%ac%94%e8%ae%b0/feed/ 1 734
版本控制再思考 https://www.qingran.net/2010/11/%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6%e5%86%8d%e6%80%9d%e8%80%83/ https://www.qingran.net/2010/11/%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6%e5%86%8d%e6%80%9d%e8%80%83/#comments Mon, 15 Nov 2010 17:37:15 +0000 https://www.qingran.net/?p=711 最近必须解决Version Control的问题了,目前使用的svn,并采用主干活跃,分支稳定的开发策略(平时的修改都在trunk进行,主干版本发布后需要修改bug才创建分支,并在分支工作,完成后merge主干),目前发现和想到的问题有以下几点:

  1. 版本库过大导致检出代码太慢(3个月过去有7000+版本,检出一次50GB);
  2. 平时工作代码的提交都在主干进行,所以主干必须能够编译,由此引出以下问题:
    • 复杂的模块儿完成时间较久,成员很久都不提交,并且提交后这段时间没有自己的修改历史日志;
    • 成员机器的硬盘在这个长时间有可能挂掉,导致工作成果丢失的风险;
  3. 成员之间交换工作成果通过svn在主干进行,违背了主干 必须能编译,并导致大量的垃圾提交。

针对以上问题目前想到的解决方法:

  1. 改用分布式版本控制工具,Mercurial和GIT,准备分别试一下;
  2. 充分利用分布式管理工具创建分支容易,速度快的特点:
    • 每个人都创建属于自己的分支,平时的工作都在分支上进行,并定期(阶段成果完成后)向主干合并
    • 自己的修改每步都可以commit到本地,每天push一次
  3. 分离美术和程序的svn目录:美术的svn目录定期干掉头1000版本。

做到以上几点后,所有提出的几点问题都应该迎刃而解。这样每个人接到工作任务后的操作顺序是以下几步:

  1. 创建属于自己的分支,可以按季度创建;
  2. 平时的工作都在此分支上进行,同时自己的每步重大修改都commit;
  3. 2天或3天视工作进度和其他人对你工作部分代码的需求而push到远程库;或者在放假前需要对代码做备份防止硬盘挂掉,也push分支工作成果到远程库;
  4. 任务完成后,测试通过后,从分支merge到主干;
  5. 新季度开始,回到操作1。

完成,临睡觉前粗糙的想了一下,应该还有很多不足之处,希望看见的兄弟多指正。

]]>
https://www.qingran.net/2010/11/%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6%e5%86%8d%e6%80%9d%e8%80%83/feed/ 2 711
SVN转换Mercurial,Mercurial的安装 https://www.qingran.net/2010/11/svn%e8%bd%ac%e6%8d%a2mercurial%ef%bc%8cmercurial%e7%9a%84%e5%ae%89%e8%a3%85/ https://www.qingran.net/2010/11/svn%e8%bd%ac%e6%8d%a2mercurial%ef%bc%8cmercurial%e7%9a%84%e5%ae%89%e8%a3%85/#comments Mon, 15 Nov 2010 16:19:11 +0000 https://www.qingran.net/?p=706 背景:目前的项目使用的版本控制是SVN。只建立了一个svn库并使用bdb模式。项目开始了3个月,svn的版本号就突破了7000,svn库在服务器端有9GB。而在windows下用TortoiseSVN检出所有的东西,总共近50GB大小(.svn目录貌似保留了所有的历史),居然需要3个小时以上!实在忍不了了,准备换分布式VC。目前暂时选择Mercurial。


首先需要把svn转换为Mercurial,同时还要把svn库分离一下,系统是ubuntu-10.04 server amd64:

#apt-get install mercurial meld python-subversion

#svnadmin dump ./repos/ > svn.dump
#wget http://bakacsin.ki.iif.hu/~kissg/project/svn/svngrep

#./svngrep '^dev\/core\b' svn.dump > core.dump
svngrep有重大问题,导致其导出的不全,改用svndumpfilter

#cat svn.dump | svndumpfilter include dev/core --drop-empty-revs --renumber-revs  > core.dump
#svnadmin create core/
#sed -r -e 's/^Node-path: dev\//^Node-path: /' core.dump > core.dump.new
#svnadmin load core < core.dump.new

# cat /root/.hgrc
[extensions]
hgext.convert =

#hg convert file:///data/test/core/

#mkdir -p /var/mercurial/

#mv /data/test/core-hg /var/mercurial/

#chown -R www-data:www-data /var/mercurial/

#chmod -R 700 /var/mercurial/

然后建立Mercurial:

# mkdir /var/www/cgi-bin/
# cp /usr/share/doc/mercurial/examples/hgweb.wsgi /var/www/cgi-bin/
# cat /var/www/cgi-bin/hgweb.config
[web]
style = coal
allow_push = *
push_ssl = false

[paths]
/ =  /data/mercurial/**

#chmod +x /var/www/cgi-bin/hgwebdir.wsgi

修改 /var/www/cgi-bin/hgwebdir.wsgi 文件,最后一行的“application = hgwebdir(‘hgweb.config’)“修改为:

application = hgwebdir('/var/www/cgi-bin/hgweb.config')

配置apache2,使之运行wsgi模式的Mercurial:

#apt-get install libapache2-mod-wsgi

在需要加入的VirtualHost里加入:

WSGIScriptAliasMatch ^(.*)$ /var/www/cgi-bin/hgwebdir.wsgi$1
<Directory "/data/mercurial/">
	Options FollowSymlinks
	DirectoryIndex index.html
	AuthType Basic
	AuthName "Subversion Repository"
	AuthUserFile /etc/apache2/dav_svn.passwd
	Require valid-user
</Directory>

<Directory "/var/www/cgi-bin">
	Options ExecCGI FollowSymlinks
	AddHandler wsgi-script .wsgi
	AuthType Basic
	AuthName "Subversion Repository"
	AuthUserFile /etc/apache2/dav_svn.passwd
	Require valid-user

</Directory>

重启apache2,然后就开始使用吧。

]]> https://www.qingran.net/2010/11/svn%e8%bd%ac%e6%8d%a2mercurial%ef%bc%8cmercurial%e7%9a%84%e5%ae%89%e8%a3%85/feed/ 1 706