Oct 14, 2010

public access git on ubuntu/debian

前面介绍了
gitosis搭建: setting up gitosis on ubuntudebian
gitweb搭建: setting up gitweb on ubuntudebian
gitosis权限: gitosis权限

现在,有个项目,自己项目组的人肯定要有commit权限,但其他人也要有readonly权限,虽然,可以在gitosis-admin 中添加readonly组,但,我们不可能找每个人要ssh public key吧

这时候, 可以用 git-daemon
$ sudo apt-get install git-daemon-run
修改 /etc/sv/git-daemon/run , 把git repo的路径设置正确就行
$ cat /etc/sv/git-daemon/run
#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
  /usr/lib/git-core/git-daemon --verbose --base-path=/srv/gitosis/repositories

把要让匿名访问的git repository目录下放一个名为 git-daemon-export-ok 的空文件.

$ sudo sv restart git-daemon

$ git clone git://mypc/Your-test.git

Oct 10, 2010

gitosis权限设置

通过gitosis搭建git服务器可以参考 http://ox0spy.blogspot.com/2010/10/setting-up-gitosis-on-ubuntudebian.html.

下面看下gitosis权限设置
gitosis有组(group)和成员(members), 权限就是对repository的访问限制.
有两个关键字修饰 repository ,一个是 writable, 一个是 readonly.
writable 意思是,对这个repository 有写权限
readonly 是, 对这个repository 只有读权限

最常见的例子:
[group gitosis-admin]
writable = gitosis-admin   # 注意,后面不要加 .git
members = ox0spy@lucid

这三句话是啥意思呢?
第1句,定义一个组, 名字为 gitosis-admin
第2句,  writable = 后面跟的是仓库名, 只是这个仓库名是去掉.git的,所以, 我们在 git clone 时,要自己加上 .git,如下:
$ git clone gitosis@localhost:gitosis-admin.git  # 注意最后的 .git
writable 后面可以跟很多个仓库名, 他们以whitespace分开, 一般以空格分隔,如下:
writable = gitosis-admin android mytest
第3句, members 说明这个组的成员, 成员名是 username@hostname , @hostname 不能去,否则会报错.
成员之间也通过 whitespace 分隔,通常用空格分隔.

可以发现,成员属于某个组, 而对repository的访问权限是通过组控制的.
这样的话,如果同一个repository,想让某些用户只能读,不能写,就必须新建一个组, 下面就看下怎么实现这个功能.
[group test]  # 该组用户可写
members = ox0spy@lucid lfs@debian
writable = mytest

[group test_ro] # 该组用户只读
members = toor@ubuntu
readonly = mytest              # 只读,这里是readonly 而不是 readable

这样,toor@ubuntu 就只能对 gitosis@Your-server:mytest.git 进行读

members 可以包含其他组的所有成员
[group member_test]
writable = memberTest
readonly = mytest
members = ox0spy@lucid @test
# 这里的 @test 就是上面 test组的所有成员 (ox0spy@lucid lfs@debian)

最后,要说的是, 一个组可以只有 members, 没有 writable 和 readonly,如下:
[group another_group]
members = monkey@abc cow@gentoo

这个组只是为了被其他组包含而定义.

setting up gitweb on ubuntu/debian

1. 安装
$ sudo apt-get install gitweb

2. 设置
修改 /etc/gitweb.conf
# projectroot 设置成你自己的仓库路径, 这是gitosis默认路径
$projectroot = "/srv/gitosis/repositories/"; 

view /etc/apache2/conf.d/gitweb  # 一般不用修改

$ cp -r /usr/share/gitweb /var/www

3. 测试
$ curl localhost/gitweb/

Oct 8, 2010

setting up gitosis on ubuntu/debian

1. install
# run on server
$ sudo apt-get install git-core gitosis

2. generate ssh key
# run on your pc
$ ssh-keygen -t rsa

3. upload the ssh public key
# run on your pc
$ scp ~/.ssh/id_rsa.pub USER@YOUR_SERVER:/tmp

4. create admin repository
# run on server
$ sudo -H -u gitosis gitosis-init < /tmp/id_rsa.pub # monkey's ssh public key
$ sudo chmod 755 /srv/gitosis/repositories/gitosis-admin.git/hooks/post-update

5. checkout gitosis-admin
# run on your pc
$ git clone gitosis@YOUR_SERvER:gitosis-admin.git

6. grante right for members
# run on your pc, add new group - android
[group android] # team name
writable = 0xdroid-0x5 0xdroid-0x4  # project name
members  = monkey@debian cow@ubuntu  # members

# add cow's ssh public key
$ git add keydir/cow@ubuntu.pub gitosis.conf

# grante cow commit right to android
$ git commit -m "Granted cow commit right to android"
$ git push  # now, cow has the commit right.

7. create new repositories
There are two ways to commit your code:
a. checkin your codes from zero
# create new repositories - 0xdroid-0x5.git
$ cd YOUR-CODE-DIR
$ mkdir 0xdroid-0x5.git && cd 0xdroid-0x5.git
$ git init

# modify .gitignore

$ git remote add origin gitosis@YOUR_SERVER:0xdroid-0x5.git
$ git add .
$ git commit -m "initial import"
$ git push origin master:refs/heads/master

b. checkin your codes from old git repo
$ cd YOUR-OlD-GiT-REPO
$ git remote -v
$ git pull  # update
$ git remote rm origin
$ git remote add origin gitosis@YOUR_SERVER:0xdroid-0x5.git
$ git push origin master:refs/heads/master

8. checkout codes
$ git clone gitosis@YOUR_SERVER:0xdroid-0x5.git

Oct 7, 2010

2010 国庆

国庆马上就过去了,7天假,似乎也没做什么事情。

去南湖梦幻岛转悠了大半天

一本应该看完的perl电子书,也没看完,主要是今天的失误, 导致一些小损失 ... ,今天的确是悲剧的一天

本应该做的其他两件事情根本没去做

唯一开心的是,做了十几道Chinaunix的php大赛题, 翻着php manual 做的 ... ,用C的风格来做php array遍历 ... , 不过,应该能有件Chinaunix的长袖 T恤 吧

明天开始工作, 最近不太喜欢工作,唉

Sep 29, 2010

vim 中文乱码

   好久没碰到 vim 中文乱码问题了,最近gedit也中文(gbk)乱码很容易解决了( gconf-editor ),但是vim我怎么也想不明白,一样的系统(ubuntu 10.04),一样的.vimrc,表现咋就这么大呢, 把 vim reinstall 了几遍,问题依旧....

   想了好久最后想到,以前隐约自己编译安装过一次vim,当时没有网络,apt-get purge vim-*,然后, locate vim, rm 所以vim相关的文件,然后 apt-get install vim 就可以正常显示中文了.

Jul 24, 2010

整理下博客

添加 Recent comments, 换个style ..
删除几个没用的小工具...
要继续写博客 ...

Jul 23, 2010

据说我有做山寨机牛人的潜力

激动坏了,,

中午项目组同事吃饭, 一原moto老兄又开始给大家科普下山寨手机,后来讲到,他一朋友,专做山寨手机,Linux很厉害的,年薪 40w$,深圳一山寨厂的技术头。

后来讲到,我有这种潜力,多谢这么看好我 :-)

记录下,看看n年后我在干嘛

Jul 16, 2010

在这边快2个月了

  自从到TT公司后,工作充实多了,充实的中午都没空看 Google Reader, planet 了。

  从来没有这么认真的学习、工作过,每天早早起床上班, 中午吃饭都在讨论技术问题,下午自愿加班继续没完成的工作...

  项目的管理模式也发生了很大的变化,不像以前的传统项目管理模式,总是PM分工大家做。现在,大家讨论要完成那些feather, 然后,每个人自己选择喜欢的task。当然,这种Alige的管理模式要想run的好,项目组必须有一个好的氛围,大家都很自觉才行。一旦scrum运行的好, 工作的确是件快乐的事情

  这种模式也可以让每个人最大限度的发挥出自己的水平/潜力,任务是自己选择的,加班也是自愿的,哈哈

  在这边工作快2个月了,收获还是蛮大的,上次也被manager沟通了下,竟然说我support做的不够积极,应该更加主动些, 汗 ...

  然后,把环境搭建、wiki管理、版本控制、自动编译、自动测试都让我做, 还要更加积极的support其他人, 更要命的是要完成的任务还不能比别人少

  我还有最头疼的英语要补,每次写email、文档都要浪费很多时间(必须英文), 还好 communicator上可以写中文,不然真的疯了。
  ps: 昨天门禁卡出问题了,没法输密码,今天老外问我咋回事,费了好大的劲,写了句很烂的英语,才让他明白,不知有没有被鄙视

  努力 ... 

Jul 3, 2010

1年4个月

时间飞逝,来成都1年4个月了,在双楠也待了1年了,明天去重新找房子。

x + 3 + 11 + y + 1.z

在新公司也一个多月了,努力。。。