强烈建议:在架设git服务器之前,了解下git的工作原理,直接参看<<pro git>>这本书即可,这本书在网上有公开的中文版下载。
(1) 项目仅仅是2,3个人合作开发,项目不公开。
(2) 并且有一台闲置的Ubuntu 11.10服务器,每个开发人员都有各自的账号,开发人员通过windows端的putty软件登陆到Ubuntu服务器上编写程序,调试,并提交。
在这一需求下,一切都很简单,并不需要安装gitosis之类的工具,也不需要生成SSH公钥(虽然后面有提到)。
2. 生成 SSH 公钥(在我们的需求下,这一步不是必须的,但若不配置公钥,每次git clone和git push时需要输入git密码)
话虽如此,大多数 Git 服务器使用 SSH 公钥来授权。为了得到授权,系统中的每个没有公钥用户都得生成一个新的。该过程在所有操作系统上都差不多。 首先,确定一下是否已经有一个公钥了。SSH 公钥默认储存在账户的 ~/.ssh 目录。进入那里并查看其内容,有没有公钥一目了然:
$ cd ~/.ssh $ ls id_dsa known_hosts id_dsa.pub |
关键是看有没有用 文件名 和 文件名.pub 来命名的一对文件,这个 文件名 通常是id_dsa 或者 id_rsa。 .pub 文件是公钥,另一个文件是密钥。假如没有这些文件(或者干脆连 .ssh 目录都没有),你可以用 ssh-keygen 的程序来建立它们,该程序在 Linux/Mac系统由 SSH 包提供, 在 Windows 上则包含在 MSysGit 包里:(linux下命令也是ssh-keygen,生成文件位于~/.ssh/下)
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/schacon/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/schacon/.ssh/id_rsa. Your public key has been saved in /Users/schacon/.ssh/id_rsa.pub. The key fingerprint is: 43:c5:5b:5f:b1:f1:50:43:ad:20:a6:92:6a:1f:9a:3a schacon@agadorlaptop.local |
它先要求你确认保存公钥的位置(.ssh/id_rsa),然后它会让你重复一个密码两次,如果不想在使用公钥的时候输入密码,可以留空。
3. git安装
$sudo apt-get install git-core |
4. 创建git账户
$sudo adduser \ --system \ --shell /bin/sh \ --gecos 'git version control' \ --group \ --disabled-password \ --home /home/git \ git |
这种方法是网上比较常见的方法,创建的是一个禁用密码的git用户,但在使用su命令切换git用户的时候,空密码老是验证失败,大家可以使用下面的方法来为git用户添加密码:
$sudo passwd git |
5. 架设服务器
$ su git // 切换到git用户登录 $ cd $ mkdir .ssh |
接下来,把开发者的 SSH 公钥添加到这个用户的 authorized_keys 文件中。假设第2步的生成公钥放在/tmp/id_rsa.ajaxhe.pub中。
执行如下命令,将公钥放到/home/git/.ssh/authorized_keys中(没有这个文件的话就创建一个)
$touch /home/git/.ssh/authorized_keys $ cat /tmp/id_rsa.ajaxhe.pub >> /home/git/.ssh/authorized_keys |
现在可以使用 --bare 选项运行 git init 来设定一个空仓库,这会初始化一个不包含工作目录的仓库。
$ cd /opt/git $ mkdir project.git $ cd project.git $ git --bare init |
用ajaxhe账户登陆到Ubuntu 11.10服务器
$ cd myproject
$ git init
$ echo "just a test" > test.file
$ git add .
$ git commit -m 'initial commit' $ git remote add origin git@gitserver:/opt/git/project.git $ git push origin master |
注意这里还必须要创建一个文件(如test.file),否则会出现如下错误:
error: src refspec master does not match any. error: failed to push some refs to 'git@gitserver:/opt/git/project.git' |
这样,其他人的克隆和推送也一样变得很简单:
$ git clone git@gitserver:/opt/git/project.git $ vim README $ git commit -am 'fix for the README file' $ git push origin master |