首先声明该篇文章主要参考了http://blog.youkuaiyun.com/ice520301/article/details/6142503,大部分内容一样,但是原文章有些许小错误,会使小白用户看不懂或者,有错误,是配置没办法继续。但里面添加了注释,修改了错误,所以算是原创吧,但是为了维护原来作者权益,类型还是选择了转载。
该方法主要参考http://blog.youkuaiyun.com/ice520301/article/details/6142503和http://blog.youkuaiyun.com/tommy_wxie/article/details/38779667。其实第一篇文章就完全够用了,只是作者在写博客的时候,里面会有些许错误,比如说前面说的是git_repo文件夹下操作,后面作者就写成了repo文件夹。这对于对git服务器有了解的人来说不算什么问题,但是对于git小白,就不知道所以然了。老师让我搭个git服务器,原本想按照网上的操作,无脑的照着做,无奈找不到没有错误的,只有自己结合了几篇文章,然后把原来作者的错误改正过来,以供git服务器小白参考。
git服务器搭建过程
安装配置git服务器
a@server:~$ sudo chown git:git /home/repo
a@server:~$ sudo chmod 700 /home/repo
安装配置gitosis
a@server:~$ git config –global user.name “myname”
a@server:~$ git config –global user.email “myname@server “
a@server:~$ sudo apt-get install python-setuptools
a@server:~$ cd /tmp
a@server:/tmp$ git clone https://github.com/res0nat0r/gitosis.git
a@server:/tmp$ cd gitosis
a@server:/tmp/gitosis$ sudo python setup.py install
$ ln -s /home/repo /home/git/repositories
$ exit
usr@pc1:~$ ssh-keygen -t rsa
在得到ssh公钥时,只需要按回车就行,其中有输入密码,可以直接按照回车。然后注意看提示,提示你的ssh公钥匙已经存放到你当前pc的一个地方。
将公钥拷贝到服务器的/tmp下:
usr@pc1:~$ scp /路径/.ssh/id_rsa.pub git@IP:/tmp
注意:要把这里的路径改为上句命令下,提示你公钥匙存放的路径。这里把上句命令中的IP 改为你自己作为git服务器的pc的IP地址 ,例如192.168.1.22(地址我随便编的,请大家填写自己的ipv4地址)
a@server:/tmp/gitosis$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
当出现以下两句就说明已经成功,当然以下两句也可能是中文,取决于你ubuntu的语言设置。
Initialized empty Git repository in /home/repo/gitosis-admin.git/
Reinitialized existing Git repository in /home/repo/gitosis-admin.git/
现在我们知道,git服务器建立了一个存放仓库的文件夹,在/home/repo,在该文件夹下面,存放的是git的各种仓库,之前一直不了解什么是仓库,仓库是文件夹的别名吗?其实git把每一个项目或者叫做工程或者是project叫做仓库,后缀是 .git 都是git的仓库。
注意要先进入/home/git目录下
a@server:/home/git$ sudo passwd root
a@server:/home/git$ su
root@server:/home/git # cd repositories
root@server:/home/git/repositories # cd gitosis-admin.git/
root@server:/home/git/repositories/gitosis-admin.gi t #sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update
root@server:/home/git/repositories/gitosis-admin.git# exit
在服务器上新建一个测试项目仓库
我建了一个叫“teamwork”的仓库。
切换到git用户:
a@ubuntu:/home/git$ su git
$ cd
$ cd home/
$ mkdir prj_git
$ cd prj_git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
$ exit
管理gitosis的配置文件
一点分析:对于git服务器来说,整体有三个部分,一部分是你自己的文件,另外一个是缓存区,最后一个就是本地库。当你修改了自己的文件后,你会git add xx将修改保存到缓存区,然后再用commit推送修改到本地库中。注意git push是将本地仓库的修改推送到服务器的仓库中,git commit是将本地修改保存到本地仓库中。
即使是在服务器上,为了修改git仓库中的/home/git_repo/gitosis-admin.git这个管理权限的仓库,也是要把该仓库克隆到本地的一个仓库中的,然后向上面说的,修改本地文件,保存本地修改到本地仓库,然后再将本地仓库修改推送至服务器仓库,这样就完成了服务器权限的修改了,当然,前提是要具有管理员权限。
刚刚提到,gitosis本身的配置也是通过git来实现的。在你自己的开发机里,把gitosis-admin.git这个仓库clone下来,就可以以管理员的身份修改配置了。
注意:这里仍然是把上句中的IP 改成是你自己作为git服务器的地址经过亲自实验,如果上句克隆下来的gitosis-admin仓库如果不能修改,则把上句改为
root@server:/home/a/work/gitosis-admin # cp /path/to/.ssh/id_rsa.pub ./keydir/b.pub
root@server:/home/a/work/gitosis-admin # exit
[gitosis]
[group hello_ro]
readonly = teamwork
members = lz
这个配置文件表达了如下含义:gitosis-admin组成员有a, usr,相当于这俩是git服务器的管理员。该组对gitosis-admin仓库有读写权限;
teamwork组有a,b两个成员,该组对teamwork仓库有读写权限;
team_ro组有lz一个成员,对teamwork仓库有只读权限。
加入新文件、提交并push到git服务器:
usr@pc1:~/work/gitosis-admin$ git add .
usr@pc1:~/work/gitosis-admin$ git commit -am "add teamweok prj and users"
usr@pc1:~/work/gitosis-admin$ git push origin master
注意:这里" "里面的内容是自己写的备注之类的东西,可以和上面不同,但是一定要使用英文的双引号
初始化测试项目
usr@pc1:~/work$ cd teamwork-ori/
usr@pc1:~/work/teamwork-ori$ git init
usr@pc1:~/work/teamwork-ori$ git commit -am "initial version"
usr@pc1:~/work/teamwork-ori$git remote rm origin
注意:这里仍然是把上句中的IP 改成是你自己作为git服务器的地址
usr@pc1:~/work/teamwork-ori$ git push origin master
下面进入用户b来测试
usr@pc1:~/work/teamwork-ori$ su b
$ cd home
$ mkdir b
$ cd b
$ git clone git@IP:/home/repo/teamwork.git
注意:这里仍然是把上句中的IP 改成是你自己作为git服务器的地址
$ vim hello
$ git add .
$ git commit -am "this is b added"
$ exit
至此,你的git服务器已经搭建并测试完成了。
接下来的步骤我还没有测试,可以根据需要自己捣鼓以下。windows客户端的使用可以参考http://blog.youkuaiyun.com/tommy_wxie/article/details/38779667这篇文章的步骤五。
添加已有git项目
首先需要从你的工作仓库中得到一个纯仓库, 比如你的工作目录为~/kernel, 你想导出纯仓库到你的优盘里,然后拷贝到gitserver上去。
$ git clone –bare ~/kernel /media/udisk
然后就拿着优盘,交给gitserver的管理员,让他拷贝到/home/repo/下,同时需要配置 gitosis相关配置文件哦,这个就不用再说了吧。比如:下载ALSA库:
git clone git://android.git.kernel.org/platform/external/alsa-lib.git
git clone git://android.git.kernel.org/platform/external/alsa-utils.git
git clone –bare alsa-lib alsa-lib.git
git clone –bare alsa-utils alsa-utils.git
配置gitweb
1. 安装gitweb
sudo apt-get install gitweb
2. 安装apache2
sudo apt-get install apache2
3. 配置gitweb
(1)默认没有 css 加载,把 gitweb 要用的静态文件连接到 DocumentRoot 下:
cd /var/ www/
sudo ln -s / usr/ share/ gitweb/* .
(注意后面的点)
(2)修改配置:
sudo vi /etc/ gitweb.conf
将 $projectroot 改为gitosis-admin.git所在目录: /home/git/repositories
(3)修改 /home/git/repositories权限,默认情况下,gitosis将repositories权限设置为不可读的
sudo chmod 777 -R /home/git/repositories
11.编辑apache2配置文件,建立web站点 (默认情况下可以忽略此步骤)
(1) 编辑apache2配置文件
ubuntu中默认的web目录是/var/www,默认的cgi目录是 /usr/lib/cgi-bin/,安装完成gitweb后,gitweb的gitweb.cgi会自动放置
到该目录下。如果你的cgi路径不是默认的/usr/lib/cgi-bin/,需要将gitweb安装在/usr/lib/cgi-bin中的gitweb.cgi复制到原来配置
的cgi-bin路径,并修改apache的配置文件/etc/apache2/apache.conf:
SetEnv GITWEB_CONFIG /etc/gitweb.conf
gitweb.conf配置文件形如:(可自行修改,这里不做详细介绍)
<Directory "/srv/www/cgi-bin/gitweb">
Options FollowSymlinks ExecCGI
Allow from all
AllowOverride all
Order allow,deny
<Files gitweb.cgi>
SetHandler cgi-script
</Files>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* /gitweb.cgi/$0 [L,PT]
</Directory>
(2)重新启动apache:sudo /etc/init.d/apache2 restart,访问http://localhost/cgi-bin/gitweb.cgi
<以下未经测试>
a2dissite gitserver 禁用
a2ensite gitserver 使能
/etc/init.d/apache2 restart 重启
git clone git://git.kernel.org/pub/scm/git/git.git
cd git
make GITWEB_PROJECTROOT=”/home/repo” prefix=/usr gitweb/gitweb.cgi
cd gitweb
cp -av git* /home/repo/
<VirtualHost 172.20.146.39:80>
ServerName 172.20.146.39
DocumentRoot /home/repo
ScriptAlias /cgi-bin/ /home/repo
<Directory /home/repo>
Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
chmod a+r repo
chmod a+x repo
6./etc/init.d/apache2 restart
git clone http://192.168.1.1/alsa-lib.git
git clone http://192.168.1.1/alsa-utils.git
git访问方式:
git clone git@192.168.1.1:alsa-lib.git
Web网页浏览:
http://192.168.1.1
1.windows文件命名不区分大小 写,而linux支持。这样android源码下载时会出现一下问题。大约有15个文件存在这个问题。
2.库的描述文件在.git文件夹的description文件中。编辑该文件,在gitweb页中就会有 description。
3.gitosis库hooks下的post- update不是由post-update.sample重命名过来的,它们不一样。post-update可以更新工作目录,保持与库一致。没有它配置 文件是不会更新的。
4.(1)git@hello:/home/git$ git add .
error: readlink(“external/openssl/apps/md4.c”): No such file or directory
error: unable to index file external/openssl/apps/md4.c
fatal: adding files failed
Initialized empty Git repository in /external/openssl/.git/
root@/external/openssl # git add .
error: readlink(“apps/md4.c”): No such file or directory
error: unable to index file apps/md4.c
fatal: adding files failed
(3) root@android-2.1_r2$ rm -Rf .repo
root@android-2.1_r2 $ find . -name “.git” | xargs rm -Rf