http://blog.csdn.net/kesalin/article/details/6943770python
XCode 4 默認支持 Git 做爲代碼倉庫,當咱們新建一個倉庫的時候,能夠勾選建立默認倉庫,只不過這個倉庫是在本地的。本文介紹如何在 mac 機器上建立 Git 服務器,整體思路是:使用 gitosis 來簡化建立過程,在用做服務器的機器上建立一個名爲 git 的帳戶來建立 git 服務器,其餘客戶端經過 ssh 機制訪問 git 服務器。git
本文文檔:點此下載web
一,建立 git 帳戶
1,在用做服務器的機器 Server 上建立 git 帳戶。咱們能夠經過 System Preferences->accounts 來添加。在這裏我添加一個 git 的 administrator 帳戶,administrator 不是必須的,在這裏僅僅爲了方便。bash
2,設置遠程訪問
logout 當前帳戶,使用 git 帳戶登陸;在 System Preferences->Sharing 中,勾選:Web Sharing 和 Remote Logig。
二,下載安裝 gitosis
1,Mac Snow默認已經爲咱們安裝了 Git 和 Python,可使用以下命令查看其版本信息:服務器
yourname:~ git$ git --version
git version 1.7.3.4
yourname:~ git$ python --version
Python 2.6.1
2,經過命令 "git clone git://eagain.net/gitosis.git" 來下載 gitosisssh
yourname:~ git$ git clone git://eagain.net/gitosis.git
Cloning into gitosis
remote: Counting objects: 614, done.
remote: Compressing objects: 100% (183/183), done.
remote: Total 614 (delta 434), reused 594 (delta 422)
Receiving objects: 100% (614/614), 93.82 KiB | 45 KiB/s, done.
Resolving deltas: 100% (434/434), done.
3,進入 gitosis 目錄,使用命令 "sudo python setup.py install" 來執行 python 腳原本安裝 gitosis。編輯器
yourname:~ git$ cd gitosis/
yourname:gitosis git$ sudo python setup.py install
running install
running bdist_egg
running egg_info
creating gitosis.egg-info
……
Using /Library/Python/2.6/site-packages/setuptools-0.6c9-py2.6.egg
Finished processing dependencies for gitosis==0.2
三,製做 ssh rsa 公鑰
1,回到 client 機器上,製做 ssh 公鑰。在這裏個人使用同一臺機器上的另外一個帳戶做爲 client。若是做爲 client 的機器與做爲 server 的機器不是同一臺,也是類型的流程:製做公鑰,放置到服務的 /tmp 目錄下。只不過在同一臺機器上,咱們能夠經過開啓另外一個 terminal,使用 su 切換到 local 帳戶就能夠同時操做兩個帳戶。ide
yourname:~ git$ su local_account
Password:
bash-3.2$ cd ~
bash-3.2$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/local_account/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/local_account/.ssh/id_rsa.
Your public key has been saved in /Users/local_account/.ssh/id_rsa.pub.
bash-3.2$ cd .ssh
bash-3.2$ ls
id_rsa id_rsa.pub
bash-3.2$ cp id_rsa.pub /tmp/
yourame.pub
在上面的命令裏,首先經過 su 切換到 local 帳戶(只有在同一臺機器上纔有效),而後進入到 local 帳戶的 home 目錄,使用 ssh-keygen -t rsa 生成 id_rsa.pub,最後將該文件拷貝放置到 /tmp/yourname.pub,這樣 git 帳戶就能夠訪問 yourname.pub了,在這裏更名是爲了便於在 git 中辨識多個 client。
四,使用 ssh 公鑰初始化 gitosis
1,不論你是以那種方式(郵件,usb等等)拷貝 yourname.pub 至服務器的 /tmp/yourname.pub。下面的流程都是同樣,登入服務器機器的 git 帳戶,進入先前提到 gitosis 目錄,進行以下操做初始化 gitosis,初始化完成後,會在 git 的 home 下建立 repositories 目錄。post
yourname:gitosis git$ sudo -H -u git gitosis-init < /tmp/yourname.pub
Initialized empty Git repository in /Users/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /Users/git/repositories/gitosis-admin.git/
在這裏,會將該 client 當作認證受信任的帳戶,所以在 git 的 home 目錄下會有記錄,文件 authorized_keys 的內容與 yourname.pub 差很少。測試
yourname:~ git$ cd ~
yourname:~ git$ cd .ssh
yourname:.ssh git$ ls
authorized_keys
咱們須要將 authorizd_keys 稍作修改,用文本編輯器打開它,刪除裏面的"command="gitosis-serve yourname",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " 這一行:
yourname:.ssh git$ open -e authorized_keys
而後,咱們對 post-update 賦予可寫權限,以便 client 端能夠提交更改。
yourname:gitosis git$ sudo chmod 755 /Users/git/repositories//gitosis-admin.git/hooks/post-update
Password:
yourname:.ssh git$ cd ~
yourname:~ git$ cd repositories/
yourname:repositories git$ ls
gitosis-admin.git
yourname:repositories git$
在上面的命令中能夠看到,gitosis 也是做爲倉庫的形式給出,咱們能夠在其餘帳戶下 checkout,而後對 gitosis 進行配置管理等等,而無需使用服務器的 git 帳戶進行。
最後一步,修改 git 帳戶的 PATH 路徑。
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 配置
1,回到 local 帳戶,首先在 terminal 輸入以下命令修改 local 的 git 配置:
bash-3.2$ git config --global user.name
"yourgitname"
bash-3.2$ git config --global user.email "yourmail@yourcom.com"
2,測試服務器是否鏈接正確,將 10.1.4.211 換成你服務的名稱或服務器地址便可。
yourname:~ local_account$ ssh git@10.1.4.211
Last login: Mon Nov 7 13:11:38 2011 from 10.1.4.211
3,在本地 clone 服務器倉庫,下面以 gitosis-admin.git 爲例:
bash-3.2$ git clone git@10.1.4.211: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 倉庫至本地了。
4,在本地管理 gitosis-admin:
進入 gitosis-admin 目錄,咱們來查看一下其目錄結構:gitosis.conf 文件是一個配置文件,裏面定義哪些用戶能夠訪問哪些倉庫,咱們能夠修改這個配置;keydir 是存放ssh 公鑰的地方。
bash-3.2$ cd gitosis-admin/
bash-3.2$ ls
gitosis.conf keydir
bash-3.2$ cd keydir/
bash-3.2$ ls
yourname.pub
咱們只須要將其餘 client 產生的 ssh 公鑰添加到 keydir 目錄下,並在 gitosis.conf 文件中配置這些用戶能夠訪問的倉庫(用戶名與放置在 keydir 下sh 公鑰名相同,這就是在前面咱們要修改ssh 公鑰名的緣由),而後將改動提交至服務器,這樣就可讓其餘的 client 端訪問服務器的代碼倉庫了。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1) 在 server 端建立空的 repository
$ cd path/to
$ mkdir newrepo.git
$ cd newrepo.git
$ git init --bare
# --bare flag 只是用來存儲 pushes,不會當作本地 repository 來使用的。
2) 在 client 端,建立 local repository 並 push
$ cd path/to
$ mkdir newrepo
$ cd newrepo
$ git init
$ touch README
$ git add .
$ git commit -m "initial commit"
$ git remote add origin git@yourComputerName:/path/to/newrepo.git # 若是直接以前在 server 端建立的 newrepo.git 是在 home 目錄,則這裏地址爲:git@yourComputerName:newrepo.git
$ git push origin master