XCode 默认支持 Git 作为代码仓库,当我们新建一个仓库的时候,可以勾选创建默认及使用配置,总体思路是:使用 gitosis 来简化创建过程,在用作服务器的机器上创建一个名为 gitserver 的账户来创建 git 本地服务器,其他客户端通过 ssh 机制访问 git 服务器。
一、创建新用户
- 在用作服务器的 Server机器 上创建 gitserver账户。我们可以通过 System Preferences->accounts 来添加。在这里我添加一个 gitserver 的 administrator 账户,administrator 不是必须的,在这里仅仅为了方便。
或者通过命令:
sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /srv/example.com/git \
gitserver
- 设置远程访问
logout 当前账户,使用 gitserver 账户登录;在 System Preferences->Sharing 中,勾选:Web Sharing 和 Remote Logig。即远程登录和文件共享。
二、下载安装 gitosis
- 下载安装gitosis
通过以下命令行下载,或者在github上直接下载。
git clone git://eagain.net/gitosis
进入 gitosis 目录 执行 python 脚本来安装 gitosis。
python setup.py install
三、制作SSH公钥
- 回到 client 机器上,制作 ssh 公钥,放置到gitserver的 /tmp 目录下。使用以下命令。
bash-3.2$ cd ~
bash-3.2$ ssh-keygen -t rsa
bash-3.2$ cd .ssh
bash-3.2$ ls
id_rsa id_rsa.pub
bash-3.2$ cp id_rsa.pub /tmp/yourame.pub
进入到 local 账户的 home 目录,使用 ssh-keygen -t rsa 生成 id_rsa.pub,最后将该文件拷贝放置到 /tmp/yourname.pub,这样 gitserver 账户就可以访问 yourname.pub了,注意,此处一定要将公钥的名字改成和yourname.pub中的最后一句相同,比如我的文件中最后一句是yinli@localhost ,因此公钥名字改为yinli@localhost.pub ,在这里改名是为了便于在 gitserver 中辨识多个 client。
四、使用 ssh 公钥初始化 gitosis
- 拷贝 yourname.pub 至服务器的 /tmp/yourname.pub。登入服务器机器的 gitserver 账户,进入先前提到 gitosis 目录,进行如下操作初始化 gitosis,初始化完成后,会在 gitserver 的 home 下创建 repositories 目录。
sudo -H -u gitserver gitosis-init < /tmp/yourname.pub
- 在这里,会将该 公钥的client 当做认证受信任的账户,因此在 gitserver 的 home 目录下会有记录,路径为 /~/.ssh/authorized_keys 的文件内容与 yourname.pub 差不多。
open -e ~/.ssh/authorized_keys
我们需要将 authorizd_keys 稍做修改,用文本编辑器打开它,删除里面的"command="gitosis-serve yourname",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " 这一行:
- 然后,我们对 post-update 赋予可写权限,以便 client 端可以提交更改。
sudo chmod 755 /Users/gitserver /repositories//gitosis-admin.git/hooks/post-update
- 最后一步,修改 git 账户的 PATH 路径。
在gitosis目录下执行以下命令
yourname:gitosis git$ touch ~/.bashrc
yourname:gitosis git$ echo PATH=/usr/local/bin:/usr/local/git/bin:\$PATH > .bashrc
yourname:gitosis git$ echo export PATH >> .bashrc
yourname:gitosis git$ cat .bashrc
PATH=/usr/local/bin:/usr/local/git/bin:$PATH
export PATH
五、client 配置
- 回到 local 账户,首先在 terminal 输入如下命令修改 local 的 git 配置:
bash-3.2$ git config --global user.name "yourgitname"
bash-3.2$ git config --global user.email "yourmail@yourcom.com"
与上面类似,此处我的name 填的是 yinli ,email 是 yinli@localhost ,根据自己的机器来修改。
- 测试服务器是否连接正确,将 10.1.4.211 换成你服务的名称或服务器地址即可。
ssh gitserver@192.168.1.108
- 在本地 clone 服务器仓库,下面以 gitosis-admin.git 为例:
bash-3.2$ git clone gitserver@192.168.1.108:repositories/gitosis-admin.git
Cloning into gitosis-admin
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
bash-3.2$ ls
Desktop InstallApp Music Sites
Documents Library Pictures gitosis-admin
Downloads Movies Public
bash-3.2$ git
在上面的输出中可以看到,我们已经成功 clone 服务器的 gitosis-admin 仓库至本地了。
六、添加client,以及新建&配置远程仓库
- 进入 gitosis-admin 目录,我们来查看一下其目录结构:gitosis.conf 文件是一个配置文件,里面定义哪些用户可以访问哪些仓库,我们可以修改这个配置;keydir 是存放ssh 公钥的地方。我们可以打开gitosis.conf来看看如何配置gitosis。
[group gitosis-admin]
members = yinli@localhost
writable = gitosis-admin
这个配置文件表达了如下含义:gitosis-admin组成员有yinli@localhost,该组对gitosis-admin仓库有读写权限。因为只添加了一个公钥,故members成员只有一个。
- 更改并提交本地配置文件
打开gitosis.conf,修改如下。
[group gitosis-admin]
members = yinli@localhost weixxx@localhost
writable = gitosis-admin
[group gitosis-xxprj]
members = yinli@localhost qiao@localhost
writable = teamwork
[group gitosis-xxprj_ro]
readonly = teamwork
members = weixxx@localhost
新建了gitosis-xxprj项目组以及gitosis-xxprj_ro只读项目组,并加入两个新的成员qiao@localhost,weixxx@localhost。添加了两个新的成员,因此必须加入相对应的公钥,qiao@localhost.pub,weixxx@localhost.pub拷贝并添加到keydir中。
当然目前这些配置文件的修改只是在你的本地,你必须推送到远程的gitserver上才能真正生效。
加入新文件、提交并push到gitserver服务器:
$ git add .
$ git commit -am “add teamweok prj and users”
$ git push origin master
- 配置文件上传成功后,我们就需要为gitosis-xxprj等项目添加一个新的远程仓库。
我们在服务器上新建一个空的项目仓库,叫“teamwork”。
切换到gitserver服务器上:
$ cd ~/repositories/
$ mkdir teamwork.git
$ cd teamwork.git
$ git init - -bare 注:这是在服务器上运行的,是为了初始化一个根级的git仓库
- 初始化项目
好了,现在服务器就搭建完了,并且有一个空的项目teamwork在服务器上。接下来呢?当然是测试一下,空仓库是不能clone的,所以需要某一个有写权限的人初始 化一个版本。就我来做吧,以下是在客户端完成。
$ mkdir teamwork-ori
$ cd teamwork-ori/
$ git init
$ echo “/*add something*/” > hello
$ git add .
$ git commit -am “initial version”
$ git remote add origin gitserver@192.168.1.108:repositories/teamwork.git
$ git push origin master
到此为止teamwork已经有了一个版本了,team的其他成员只要先clone一下 teamwork仓库,就可以任意玩了。
网友评论