“Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.” – http://git-scm.com
“Gitosis is a tool which provides access control and remote management for hosted Git repositories. It allows for fine-grained management of read and write access over SSH, without requiring that the users have local system accounts on the server.” – https://wiki.archlinux.org/index.php/Gitosis
ในการติดตั้ง git และ gitosis บน CentOS 5 นี้จะใช้ package จาก EPEL(Extra Packages for Enterprise Linux) ดังนั้นจะต้องทำการติดตั้ง EPEL ก่อน โดยดูวิธีการติดตั้งได้ที่นี่ http://fedoraproject.org/wiki/EPEL/FAQ#howtouse เช่น
# su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm'
หลังจากนั้นติดตั้ง git และ gitosis ด้วยคำสั่ง
# yum install git gitosis
gitosis จะสร้าง user ชื่อ gitosis ดังนี้
-sh-3.2$ finger gitosis Login: gitosis Name: git repository hosting Directory: /var/lib/gitosis Shell: /bin/sh Never logged in. No mail. No Plan.
และจะสร้างไดเรกทอรีขึ้นมา 2 อันคือ gitosis และ repositories
gitosis จะควบคุมการเข้าถึง repositories ต่างๆ ผ่านทาง repository พิเศษที่ชื่อว่า gitosis-admin ซึ่งจะอยู่ที่ /var/lib/gitosis/repositories
ทั้งนี้การที่จะติดต่อไปยังเซิร์ฟเวอร์จากเครื่องของเราจะต้องทำผ่านทาง SSH จึงจำเป็นต้องสร้าง public SSH key ที่เครื่องของเราเองก่อน ด้วยคำสั่งต่อไปนี้
$ ssh-keygen -t rsa
เมื่อได้ไฟล์ id_rsa.pub ซึ่งจะอยู่ที่ $HOME/.ssh/ มาแล้ว ก็ให้คัดลอกไฟล์นี้ไปไว้ในเซิร์ฟเวอร์ จากนั้นให้ทำการเพิ่ม public SSH key ของเราเข้าไปใน gitosis ด้วยคำสั่ง
# su - gitosis $ gitosis-init < /tmp/id_rsa.pub
จากนั้นที่เครื่องของเรา ให้ใช้คำสั่งต่อไปนี้เพื่อ clone gitosis-admin มาไว้ที่เครื่องเรา
$ git clone gitosis@HOSTNAME.COM:gitosis-admin.git
เมื่อตรวจสอบดู gitosis-admin ที่ clone มาจะพบข้อมูลดังนี้
$ cd gitosis-admin/ $ ls -l total 8 -rw-r--r-- 1 wachira staff 154 Dec 9 23:48 gitosis.conf drwxr-xr-x 3 wachira staff 102 Dec 9 23:48 keydir
ไฟล์ gitosis.conf จะใช้สำหรับในการควบคุมสิทธิ์การเข้าถึง repositories ต่างๆ ของผู้ใช้ โดยมีรูปแบบเช่น
$ cat gitosis.conf [gitosis] [group gitosis-admin] writable = gitosis-admin members = wachira@hostname [group myteam] writable = citest members = wachira@hostname someone
โดยเมื่อเราต้องการเพิ่มผู้ใช้งานก็จะต้องแก้ไขไฟล์นี้ พร้อมๆ กับต้องเพิ่ม public SSH key ของผู้ใช้ใหม่ไว้ในไดเรกทอรี keyring ด้วย
วิธีการสร้าง repository ใหม่ เช่น citest สามารถทำได้ดังนี้
$ mkdir citest $ cd citest $ git init $ git remote add origin gitosis@HOSTNAME.COM:citest.git
หลังจากนั้นเมื่อเราทำการ commit ไฟล์ต่างๆ ที่เครื่องเราเรียบร้อยแล้วให้ใช้คำสั่ง
$ git push origin master:refs/heads/master
คำสั่งนี้จะทำให้เซิร์ฟเวอร์สร้าง citest repository ที่ /var/lib/gitosis/repositories
กรณีที่ SSH server ไม่ได้ใช้ port 22 ซึ่งเป็นพอร์ตมาตรฐาน ให้ทำการแก้ไขไฟล์ ~/.ssh/config โดยเพิ่มคำสั่งดังนี้
Host *hostname.com Port 1234
อ้างอิง:
- Howto: Install git, gitosis & gitweb on CentOS 5
- Hosting Git repositories, The Easy (and Secure) Way
- 4 ssh config tips for faster remote working