需求
硬件需求:一臺Ubuntu或者debian電腦(虛擬機),能通過網絡訪問到。
軟件需求:git-core, gitosis, openssh-server, openssh-client, Apache2(Gitweb)
安裝配置git服務器
安裝配置gitosis
a@server:~$ git config –global user.name “myname”
a@server:~$ git config –global user.email “myname@server “
a@server:~$ cd /tmp
a@server:/tmp$ git clone git://eagain.net/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
將公鑰拷貝到服務器的/tmp下:
usr@pc1:~$ scp .ssh/id_rsa.pub git@<server>:/tmp
a@server:/tmp/gitosis$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /home/repo/gitosis-admin.git/
Reinitialized existing Git repository in /home/repo/gitosis-admin.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 /home/prj_git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
$ exit
管理gitosis的配置文件
剛剛提到,gitosis本身的配置也是通過git來實現的。在你自己的開發機裏,把gitosis-admin.git這個倉庫clone下來,就可以以管理員的身份修改配置了。
fatal: The remote end hung up unexpectedly
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
team組有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 push origin master
$ vim hello
$ git add .
$ git commit -am “b add”
$ exit
添加已有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 [email protected]: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) [email protected]_r2$ rm -Rf .repo
[email protected]_r2 $ find . -name “.git” | xargs rm -Rf