by agate - Published: 2010-07-20 [1:35 下午] - Category: 软件使用
by agate - Published: 2010-07-08 [2:05 下午] - Category: 软件使用
1. 新建
$ mkdir {仓库的目录名}
$ cd {仓库的目录名}
$ git init --bare
2. 从已有的 git 工作仓库中导出
$ git clone --bare {git版本控制下的项目目录} {目标仓库目录名}
注释: --bare 这个参数的原意是 "裸体", 在这里呢其实就是说原来我们 git 的仓库目录都是放在项目目录下的 .git 文件夹下, 有这么一个容身之处, 所以是有衣服包裹的非裸状态. 但是我们的仓库内容其实就是整个 .git 文件夹的内容. 所以没有独立的文件夹包裹, 故名 "裸体".
by agate - Published: 2010-07-06 [5:03 下午] - Category: 开发环境, 系统操作
参考: http://progit.org/book/zh/ch4-0.html
1. 安装 git
2. 安装 gitosis
$ git clone git://eagain.net/gitosis.git
$ sudo apt-get install python-setuptools
$ cd gitosis
$ sudo python setup.py install
3. 创建 git 用户
$ sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git
4. 初始化 gitosis
使用 ssh-keygen 来建立 ssh 公钥(如果你已经有了就不必了)
$ ssh-keygen
然后
$ sudo cp ~/.ssh/id_rsa.pub /tmp/
$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
5. 配置 gitosis
$ cd
$ git clone git@localhost:gitosis-admin.git
$ cd gitosis-admin
5.1. 编辑 gitosis.conf 文件, 格式如下
[group {repository-name}]
writable = {dir-name}
members = {user1} {user2}
5.2. 添加 user1.pub 和 user2.pub 到 keydir 目录下
5.3. 提交你的修改和添加的 pub 文件
$ git commit -a -m "message"
$ git push
5.4. 这样 user1 和 user2 就可以通过 git 操作那个 {repository-name} 了, 例如:
$ git clone git@your_server_ip:{repository-name}.git
总结:
gitosis 不用让用户把自己的 ssh 公钥贴到 ~/.ssh/authorized_keys 中, 转而交给自己 gitosis-admin 中的 keydir 目录管理, 相当巧妙.
by agate - Published: 2010-06-25 [4:11 下午] - Category: 未分类
by agate - Published: 2010-05-26 [2:05 下午] - Category: 系统操作
进程前台与后台转换需要用到以下几个命令:
1. &
我们最常用到的就是这个命令了. 用法就是放在一个命令的最后, 可以把这个命令放到后台去执行. 大概用法如下:
$ tail -f log/* &
[1] 21867
# 这里 [1] 代表它是后台运行的一个 job 编号为 1
# 这里 21867 是它的进程号
2. ctrl + z
这也是常用到的快捷键. 用于将当前正在执行的前台进程放到后台, 并且暂停. 用法大致如下:
$ vi
# 按下 ctrl + z
[2]+ Stopped vi
# 这里 [2] 代表它是后台运行的一个 job 编号为 2
# 这里 + 代表他是最近一个被放到后台的进程, 如果直接输入 fg 就是恢复这个进程.
# 这里 Stopped 说明它被停止了也就是 ctrl + z 的第二个作用 -- 暂停
# 这里 vi 就是进程名
3. jobs
查看当前后台运行的进程, 以 "[作业号][-/+] 运行状态 作业名称" 输出结果类似:
$ jobs
[1]- Running tail -f log/* &
[2]+ Stopped vi
2. fg
用于恢复后台进程到前台. 具体用法如下:
$ fg
# 将恢复 vi (还记得么 vi job 有一个加号, 它代表它是最近一次被放到后台的进程)
# 说明跟参数直接输入 fg 是恢复最近一次放入后台的进程到前台
# ctrl + z
[2]+ Stopped vi
$ fg 1
# 将恢复 tail
# ctrl + z
[1]+ Stopped tail -f log/*
$ jobs
[1]- Stopped tail -f log/*
[2]+ Stopped vi
# 再次注意 tail 变成了 Stopped, 并且没有 & 在句尾了
3. bg
用户把后台 stopped 的进程唤醒, 并且继续在后台运行. 具体用法如下:
$ bg 1
[1]+ tail -f log/* &
$ jobs
[1]- Running tail -f log/* &
[2]+ Stopped vi
# 当然 bg 也可以不跟参数就是唤醒最近放入后台的那个 stopped 进程(就是有 + 的那个)
by agate - Published: 2010-05-19 [10:37 上午] - Category: 软件使用
VirtualBox 是一个很不错的虚拟机. 它提供了很多命令行的工具帮助我们管理和使用虚拟机. 这里写一个备忘记录用过的命令:
VBoxHeadless
1. 后台启动虚拟机
$ VBoxHeadless -s [server_name] -v off
VBoxManage
1. 查看虚拟机的参数
$ VBoxManage guestproperty enumerate [server_name]
[updating...]
by agate - Published: 2010-05-01 [10:49 下午] - Category: 开发环境
现在一直使用的是 windows 7 加上 ubuntu server 的系统配置. 这里记录一下一些安装配置的细节:
1. 安装 Guest Additions
先在菜单中选择安装 Guest Additions
$ sudo apt-get install dkms
$ cd /cdrom
$ sudo ./VBoxLinuxAdditions-amd64.run
2. 关机并且设置 nat 端口映射
打开 cmd 并且进入 virtualbox 的安装目录
PATH> VBoxManage setextradata "[你的虚拟机名字]" "VBoxInternal/Devices/[e1000]/0/LUN#0/Config/[自己定义名字(根据需要比如ssh/http)]/Protocol" [TCP 或者 UDP]
PATH> VBoxManage setextradata "[你的虚拟机名字]" "VBoxInternal/Devices/[e1000]/0/LUN#0/Config/[自己定义名字(根据需要比如ssh/http)]/GuestPort" [端口号]
PATH> VBoxManage setextradata "[你的虚拟机名字]" "VBoxInternal/Devices/[e1000]/0/LUN#0/Config/[自己定义名字(根据需要比如ssh/http)]/HostPort" [端口号]
(如果你使用 PCNet 网卡, 就把 e1000 改成 pcnet. e1000 适用于 Intel PRO/1000 网卡)
一般来说, 映射 ssh 的 22 端口, http 的 80 端口, 基本就够用了.
3. 设置共享目录
首先在 virtualbox 中设置好共享目录
然后编辑 ubuntu 中的 /etc/fstab 并且加入:
[共享目录名] [ubuntu下的目标目录] vboxsf defaults 0 0
virtualbox 提供了很好的文档 http://www.virtualbox.org/manual/
备注: 如果你使用原来的介质但是新建立了一个虚拟机的话, 会发现 ubuntu 找不到网卡了. 解决方法是:
$ sudo rm /etc/udev/rules.d/70-persistent-net.rules
$ sudo reboot
by agate - Published: 2010-05-01 [8:34 下午] - Category: 开发环境
安装如下的包:
$ sudo apt-get install build-essential gnustep gobjc gnustep-make libgnustep-base-dev gnustep-devel
建立一个 alias 在 .bashrc 中:
alias objcc='gcc `gnustep-config --objc-flags` -lgnustep-base'
这样只要:
$ objcc source_file_name
备注:
gnustep-config --objc-flags 用于 gcc 对于 objc 的参数
by agate - Published: 2010-04-11 [10:00 上午] - Category: 开发环境, 系统操作
这几天疲惫于在 ubuntu 和 windows 环境下的来回切换(虽然 ubuntu 已经让我对 linux 的桌面环境刮目相看了, 但是还是有诸多的不便...). 同时也在公司里头使用了多个月的 MAC OS X. 总体还是感觉:
* windows 是让我使用起来最舒服的系统
* linux 是让我开发最舒服的系统
* mac 是让我最赏心悦目的系统.
所以呢, 如果工作我会选择 linux (呵呵我是程序员呀). 如果平时上网生活我还是喜欢 windows (丰富的应用程序). 但是我不会选择 mac (软件没有 windows 多, 问题虽然比 linux 少得多, 但是碰到问题想要找解决方案也比 linux 难得多)
于是我又回到了 windows + linux 的时代. 但是人总是要进步的呀. 过去我老是傻乎乎地装一个 desktop version 的 ubuntu 虚拟机, 然后在虚拟机中操作 ubuntu. 卡得不行不说还浪费内存. 于是想到是不是可以直接只用 linux 的命令行, 就想在公司开发那样. 于是我查了一些文档, 找到了一种方式可以不启动图形化的 virtualbox 直接以 daemon 的方式启动的方法, 再装一个 ubuntu server version. 可以减小很多的内存使用. 方法就是在命令行中键入:
"c:\Program Files\Sun\VirtualBox\VBoxHeadless.exe" -s SERVER_NAME -v off
但是仅仅这样的话你还是会看到一个 cmd 的窗口. 如果你想让它就在背后安静地运行你还可以写一个 VB Script 来放到启动项里让 ubuntu server 跟你的电脑一起启动(linux 和 windows 合二为一咯)
' 创建一个文件叫做 start_server.vbs 内容如下
CreateObject("Wscript.Shell").run """C:\Program Files\Sun\VirtualBox\VBoxHeadless.exe"" -s SERVER_NAME -v off",0
当然更重要的是 virtualbox 还可以使用 shared folder 来共享文件.
至少目前这样的系统配置是让我感觉最舒服的, 开着迅雷电驴, 聊着QQ和MSN, 逛着淘宝, 和朋友视频, 想到点子了就开上 PuTTY 开发一下看看效果. 反正我一直是觉得程序员的生活是离不开写程序的即便是在最舒服的家里. 突然摆脱了系统的切换, 好惬意 :)
by agate - Published: 2010-04-10 [10:07 下午] - Category: 软件使用