天天看點

Centos下使用gitosis配置管理git服務端

說明:由于條件有限,我這裡使用的是同一台centos的,但教程内容基本上通用。

  1.編譯安裝git git安裝教程

  2.安裝gitosis

  $ yum install python python-setuptools

  $ git clone git://github.com/res0nat0r/gitosis.git

  $ cd gitosis

  $ python setup.py install

  2.在開發機器上生成公共密鑰(用來初始化gitosis)

  $ ssh-keygen -t rsa #不需要密碼,一路回車就行(在本地操作)

  $ scp ~/.ssh/id_rsa.pub root@xxx:/tmp/ # 上傳你的ssh public key到伺服器

  3.初始化gitosis[伺服器端]

  $ adduser git # 新增一個git使用者(先添加使用者組 groupadd git)

  $ su git # 切換倒git使用者下

  $ gitosis-init < /tmp/id_rsa.pub # id_rsa.pub是剛剛傳過來的,注意放在/tmp目錄主要是因為此目錄權限所有人都有定權限的

  $ rm /tmp/id_rsa.pub # id_rsa.pub已經無用,可删除.

  4.擷取并配置gitosis-admin [用戶端]

  $ git clone git@xxx:gitosis-admin.git # 切換到root使用者并在本地執行,擷取gitosis管理項目,将會産生一個gitosis-admin的目錄,裡面有配置檔案gitosis.conf和一個 keydir 的目錄,keydir目錄主要存放git使用者名

  $ vi gitosis-admin/gitosis.conf # 編輯gitosis-admin配置檔案

  如果無法git clone的話,可以使用git clone git@xxx:/home/git/repositories/gitosis-admin.git

  # 在gitosis.conf底部增加

  [group 組名]

  writable = 項目名

  members = 使用者 # 這裡的使用者名字 要和 keydir下的檔案名字相一緻

  # vi下按zz(大寫)兩次會執行自動儲存并退出,完成後執行

  $ cd gitosis-admin

  $ git add .

  $ git commit -a -m “xxx xx” # 要記住的是,如果每次添加新檔案必須執行git add .,或者git add filename,如果沒有新加檔案,隻是進行修改的話就可以執行此句。

  # 修改了檔案以後一定要push到伺服器,否則不會生效。

  $ git push

  如果在git push的時候,遇到錯誤“ddress 192.168.0.77 maps to bogon, but this does not map back to the address - possible break-in attempt!”,解決為修改/etc/hosts檔案,将ip位址與主機名對應關系寫進去就可以了。

  注意:這裡我們并沒有進行任何的修改的,現在隻有一個管理git的項目。下面的為新添加項目的配置,大家經常用到的也就是下面的操作的。

  建立項目

  到此步就算完成gitosis的初始化了。接下來的是建立一個新項目到伺服器的操作,如第5步中配置gitosis.conf檔案添加的是

  [group project1] # 組名稱

  writable = project1 # 項目名稱

  members = xxx # 使用者名xxx一定要與用戶端使用的使用者名完全一樣,否則無權限操作

  送出修改并更新到git server服務端

  $ git commit -a -m “添加新項目project1,新項目的目錄是project1,該項目的成員是xxx“ # “”裡的内容自定

将新建立的項目送出到git server 上進行登記。以便客戶可以操作新項目.

  # 在用戶端建立項目目錄(用戶端,目前使用者為 xxx )

  現在回到開發者用戶端,上面建立了一個新項目project1并送出到了git server 。我們這裡就建立此項目的資訊.注意 項目名稱 project1要與gitosis.conf檔案配置一緻,

  $ mkdir /home/使用者/project1

  $ cd /home/使用者/project1

  $ git init

  $ git add . # 新增檔案 留意後面有一個點

  $ git commit -a -m “初始化項目project1″

  # 然後就到把這個項目放到git server伺服器上去.

  $ git remote add origin git@xxx:project1.git # xxx為伺服器位址

  $ git push origin master

  # 也可以把上面的兩步合成一步

  $ git push git@xxx:project1.git master

  說明:如果在執行 git push origin master 的時候,提示以下錯誤: error: src refspec master does not match any. error: failed to push some refs to '[email protected]:pro2.git' 這是由于項目為空的原因,我們在項目目錄裡新建立一個檔案。經過->add -> commit -> push 就可以解決了

  $ touch a.txt

  $ git add a.txt

  $ git commit -a -m 'add a.txt'

  ------------------------------------------------------------------------------------------------ 如果在git clone的時候遇到“

  error: cannot run ssh: no such file or directory - cygwin git

  ====================================================

  三、常見問題

  首先确定 /home/git/repositories/gitosis-admin.git/hooks/post-update 為可執行即屬性為 0755

  1. git操作需要輸入密碼

  原因

  公密未找到

  解決

  上傳id_rsa.pub到keydir并改為'gitosis帳号.pub'形式,如miao.pub。擴充名.pub不可省略

  2. error:gitosis.serve.main:repository read access denied

  gitosis.conf中的members與keydir中的使用者名不一緻,如gitosis中的members = foo@bar,但keydir中的公密名卻叫foo.pub

  使keydir的名稱與gitosis中members所指的名稱一緻。 改為members = foo 或 公密名稱改為[email protected]