任務:
# 配置 Gitweb
系統環境:
描(tu)述(cao):
下面開始一步一步在Mac裏搭建本地的Git服務器
配置 Server(app)
打開Server(app),目前Websites服務的狀態是這樣的(默認是關閉的,這裏截圖截晚了,PHP默認也是關閉的)
當前網站列表裏有兩個默認網站,一個80端口,一個443端口。看見默認網站就想刪?好的,開始折騰,最後你發現刪不了!修改配置文件也不行,刪除後自動又生成了,所以,要意識到現在用的是Server,不是Apache Httpd。不過通過上面是動作有如下收穫:
1、httpd服務的配置文件的路徑爲/Library/Server/Web/Config/apache2/httpd_server_app.conf,打開這個文件
# # Mac OS X Server App # # When Server App is installed, this file is used instead of /etc/apache2/httpd.conf ......
也就是說這個配置文件已經替代了apache的httpd.conf。這裏只是說明在Server(app)中配置WEB服務應該到這個地方來改,不要去 /etc/apache2/裏面去找配置文件,因爲現在我們是在Server(app)中架設網站。對,只是說明而已,其實我們的整個過程都沒有修改過這個文件,最多就是查看而已,下面纔是需要修改的地方。
0000_any_80_.conf 對應80端口的網站(主戰場)
0000_any_443_.conf 對應443端口的網站
...
回到Server(app),將Websites服務的開關調到ON,在瀏覽器輸入 http://localhost,顯示如下內容說明服務正常
修改文件內容如下:
#管理員郵箱,要想放上自己的郵箱就填上,可選ServerAdmin [email protected]
#網站根路徑,第一步的內容DocumentRoot "/Volumes/Macintosh/GoogleDrive/Website/"#默認文件DirectoryIndex index.html#下面9行保持默認值CustomLog "/var/log/apache2/access_log" combinedvhostErrorLog "/var/log/apache2/error_log"<IfModule mod_ssl.c>
SSLEngine OffSSLCipherSuite "ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM"SSLProtocol -ALL +SSLv3 +TLSv1SSLProxyEngine OnSSLProxyProtocol -ALL +SSLv3 +TLSv1
</IfModule>#設置站點根目錄屬性,注意紅色部分修改,把 ExecCGI 前面的 - 改爲 +,後面架設git服務需要使用CGI<Directory "/Volumes/Macintosh/GoogleDrive/Website/">
Options All -Indexes +ExecCGI -Includes +MultiViewsAllowOverride All
<IfModule mod_dav.c>
DAV Off
</IfModule><IfDefine !WEBSERVICE_ON>
Deny from allErrorDocument 403 /customerror/websitesoff403.html
</IfDefine>
</Directory>
開啓站點服務,瀏覽地址 http://localhost 目前站點如下所示,這裏只是開始,後面的Gitweb會出現在這裏(這個頁面完全可以自定義,不過看着好看,暫時留着吧)
配置 Git
Desktop $ mkdir library Desktop $ git init library //參數- - bare用來建立一個裸倉庫,當然也可以從一個已經存在的工作目錄中clone Desktop $ git clone - - bare library library.git
爲了方便管理,在根目錄新建一個git文件夾,將剛纔的library.git放到裏面,現在的結構爲 /Volumes/Macintosh/GoogleDrive/Website/git/library.git
sudo ln -s /Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/ /usr/libexec/git-core
sudo vim /Library/Server/Web/Config/apache2/sites/0000_any_80_.conf
# Git Setting # 設置版本庫根目錄(爲了便於擴展,這裏指向的是前面的"git"目錄) SetEnv GIT_PROJECT_ROOT "/Volumes/Macintosh/GoogleDrive/Website/git/" # 設置所有版本庫均可訪問,話說是因爲默認情況下默認只有版本庫目錄中存在 git-daemon-export-ok 文件時,該版本庫纔可以訪問 SetEnv GIT_HTTP_EXPORT_ALL # 設置 ScriptAlias ,有點CGI的意思,引用的正是我們上面的那個替身,可以理解爲 git 這個虛擬目錄指向 /usr/libexec/git-core/git-http-backend/ ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
第四部,站點目錄權限
GoogleDrive $ sudo chgrp -R _www Website
GoogleDrive $ chmod -R 775 Website/git
#將當前路徑定位到桌面 $ cd ~/Desktop # 獲取Git倉庫副本 Desktop $ git clone http://localhost/git/library.git gitt # 現在桌面上將產生一個 gitt 文件夾(剛開始手動創建的 library 文件夾可以清理掉) 到這一步我們的任務一已經基本完成,創建可讀取的Git倉庫 # 現在這個 gitt 文件夾就是我們的工作目錄,可以在裏面隨便寫點內容用於測試,例如touch一個index文件 Desktop $ cd gitt gitt $ touch index # 將index提交 gitt $ git add index gitt $ git commit -m ’test’ # 將當前庫推送到git服務站點,運行push gitt $ git push origin master
git config --local http.receivepack true
[http] receivepack = true
gitt $ git push origin master
現在任務二也基本完成了~
# 最後面的 ’git’ 字符爲自己定義的用戶名 Desktop $ sudo htpasswd -m -c /Library/Server/Web/Config/apache2/git-user.htasswd git # sudo 命令要求你輸入當前系統密碼,別搞混了,驗證通過之後纔是htpasswd提示 鍵入 ‘git’ 用戶的密碼 New password: (自定義的密碼爲git) Re-type new password:
sudo vim /Library/Server/Web/Config/apache2/sites/0000_any_80_.conf
## Auth <Location /git/library.git> AuthType Basic AuthName "Git Access" AuthUserFile /Library/Server/Web/Config/apache2/git-user.htpasswd Require valid-user </Location>
這裏暫時有個疑問,權限控制在終端裏面難道有緩存?多次測試後clone就不需要密碼了,用SourceTree這個客戶端來clone倒是需要驗證用戶信息的。
配置GitWeb
sudo cp -r /Applications/Xcode.app/Contents/Developer/usr/share/gitweb /var/www/cgi-bin/
修改站點配置文件,增加如下內容
# Gitweb Setting Alias /gitweb /var/www/cgi-bin/gitweb/ <Directory /var/www/cgi-bin/gitweb/> Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch AddHandler cgi-script cgi DirectoryIndex gitweb.cgi AllowOverride All Order Allow,Deny Allow from all </Directory>
依然和上一步一樣,引用同一個git-user.htpasswd文件對站點進行簡單訪問限制,這裏是對瀏覽器的訪問限制,比較直觀,在配置文件裏面增加如下內容
<Location /gitweb> AuthType Basic AuthName "Git Access" AuthUserFile /Library/Server/Web/Config/apache2/git-user.htpasswd Require valid-user </Location>
打開瀏覽器,測試當前配置,要求輸入密碼,輸入驗證信息git/git
看到如下404提示,說明距離成功已經不遠了。
our $GITWEB_CONFIG_SYSTEM = $ENV{'GITWEB_CONFIG_SYSTEM'} || “/etc/gitweb.conf”;
同樣的,gitweb的多個配置文件是有順序的,目前我們只需要在 /etc/gitweb.conf 這個文件裏面進行配置就可以,當然也可以定位到其他地方。一般情況下這個文件是不存在的,這裏就按照默認到/etc/目錄下,新建gitweb.conf文件,作如下編輯
# path to git projects (<project>.git) $projectroot = "/Volumes/Macintosh/GoogleDrive/Website/git/"; # Git bin root $GIT = "/usr/libexec/git-core/git";
配置好路徑之後,刷新頁面即可看到項目列表。
如果項目路徑中有中文字符,點擊瀏覽的時候可能會看不到,解決方法如下:
把gitweb.cgi中所有 file_name=>”$basedir$t->{‘name’}” 替換爲 file_name=>”$basedir” . to_utf8($t->{‘name’}) 即可。
引用自:http://blog.mylover.cn/2014/01/關於gitweb中中文文件名亂碼及代碼高亮的問題
需要注意的是,替換的時候覈對一下字符是不是全部匹配,不出意外應該是要替換9個地方。
另外localhost帶地球那個頁面,也就是index.html那個文件,可以自己修改,加入Giteweb的鏈接,這是html的內容,作相應修改就可以了。
PS: 從EverNote裏面複製出來的筆記,儘量保持版面整齊,越到後面寫的越趕了,主要是時間拖的太久,要是能給同樣在糾結這個東西的人提供一點小建議那就很欣慰了。