ubuntu14.10server搭建git服務器成功記錄

安裝配置git

  1. 安裝git和openssh。在當前用戶下執行以下命令安裝git和openssh:
    sudo apt-get install git-core openssh-server openssh-clientpython

    git-core是git版本控制核心軟件linux

    安裝openssh-server和openssh-client是因爲git須要經過ssh協議來在服務器與客戶端之間傳輸文件git

    而後中間有個確認操做,輸入Y後等待系統自動從鏡像服務器中下載軟件安裝,安裝完後會回到用戶當前目錄。若是github

    安裝提示失敗,多是由於系統軟件庫的索引文件太舊了,先更新一下就能夠了,更新命令以下:ubuntu

    sudo apt-get updatevim

  2. 配置gitwindows

    • 建立全部代碼倉庫和用戶權限的管理者git,並更改用戶的密碼。在當前用戶下執行:
      sudo useradd -m -s /bin/bash git
      sudo passwd gitbash

      useradd會在ubuntu上增長一個git用戶服務器

    • 建立git倉庫的存儲目錄、更改文件目錄屬主爲代碼倉庫的管理者git,只讓git用戶對此目錄有權限。本文檔以/home/repo目錄作爲git倉庫的存儲目錄。在當前用戶下執行:
      sudo mkdir /home/repo
      sudo chown git:git /home/repo
      sudo chmod 700 /home/repoapp

安裝配置gitosis

  1. 安裝gitosis前準備

    • 初始化git用戶。在任何一臺機器上使用git,第一次必須初始化一下。在當前用戶下初始化全局的git信息:
      git config --global user.name "jackliu"
      git config --global user.email "xcltl618@gmail.com"

    • 安裝python的setup tool。在當前用戶下執行以下命令安裝:
      sudo apt-get install python-setuptools

  2. 安裝gitosis。在當前用戶下進行安裝,執行以下命令: 

    cd /tmp
    git clone https://github.com/res0nat0r/gitosis.git

    上面有2個零啊,不要打錯了

  3. cd gitosis
    sudo python setup.py install
    默認狀態下,gitosis會將git倉庫放在 git用戶的home下,因此咱們作一個連接到/home /repo,su到git用戶,執行以下命令:
    ln -s /home/repo /home/git/repositories
    而後退出git用戶,必定要切換到git用戶下執行

  4. 配置gitosis。若是你是git服務器的管理員,在你的計算機上(最好是另外一臺PC)來生成訪問git服務器的ssh公鑰,而後將生成的公鑰拷貝到git服務器,執行相關命令來容許你用我的的計算機進行訪問和管理git服務器。本文檔以liutailin@liutailin-ThinkPad-Edge來作爲遠程訪問和控制git服務器的管理用戶。若是另一臺電腦仍是linux的電腦,還要在linux上安裝上git(傳送下載地址http://git-scm.com/downloads),而且初始化用戶git config那兩句命令,若是是linux,在此計算機上的/home/liutailin目錄下,執行以下命令: 

    • 在你的PC上選擇一個用戶作爲遠程訪問及管理git服務器的用戶,同時並生成ssh公鑰。在選中的用戶的home下,執行以下命令:
      ssh-keygen -t rsa

      windows電腦也同樣是經過這個命令來生成公鑰,默認保存在c盤用戶文件夾下的.ssh文件夾,id_rsa.pub是公鑰,用於身份驗證的

    • 將生成的公鑰拷貝到服務器的/tmp下,注意要把改爲git服務器對應的IP地址:
      scp .ssh/id_rsa.pub git@<server-IP>:/tmp

      你也能夠直接用U盤拷貝id_rsa.pub到這臺服務器上到/tmp目錄下

    • 回到git服務器/tmp/gitosis目錄,執行:
      sudo chmod a+r /tmp/id_rsa.pub

    • 在git服務器上執行以下命令,讓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/

    • gitosis經過一個git倉庫來管理配置文件,倉庫放在/home/repo/gitosis- admin.git。咱們須要爲一個文件加上可執行權限,以root用戶登陸,
      cd /home/git/repositories
      cd gitosis-admin.git/
      sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update

        exit

在git服務器上搭建測試項目庫

  1. 創建倉庫名「test」的測試倉庫。在git服務器上切換到git用戶,執行以下命令創建測試倉庫:
    su - git
    cd /home/repo
    mkdir test.git
    cd test.git
    git init --bare
    exit
    到目前爲止,這只是一個空倉庫,空倉庫是不能clone的。爲了能clone,咱們必須先讓某個有權限的人放一個初始化的版本到倉庫中。因此,咱們必須先修改一下gitosis-admin。此時須要 管理gitosis的配置文件。

  2. gitosis自己的配置也是經過git來實現的。

  • 克隆gitosis-admin.git倉庫。
    在git管理員用戶目錄下,把gitosis-admin.git這個倉庫clone下來,接下來咱們能夠用管理員的身份修改配置了。在git管理員用戶目錄下執行:

     git clone git@<server>:gitosis-admin.git

    在windows電腦上git base下同樣執行這個克隆命令
    若是出現:
    fatal: '~/gitosis-admin.git' does not appear to be a git repository fatal: The remote end hung up unexpectedly
    改爲:
    sudo git clone git@<Server-IP>:/home/repo/gitosis-admin.git

  • 拷貝須要訪問git服務器的開發用戶的ssh公鑰 獲取倉庫後,執行
    cd gitosis-admin/            進入到剛剛克隆的管理倉庫
    該目錄下的keydir目錄是用來存放全部須要訪問git服務器的用戶的ssh公鑰:各個用戶按照前面提到的辦法生成各自的ssh公鑰文件後,把全部人的ssh公鑰文件都拿來,按名字命名一下,好比b@pc1.publz@pc2.pub等,通通拷貝到keydir下:
    su root

  • cp /path/.ssh/id_rsa.pub ./keydir/b@pc1.pub
    exit

    windows下直接複製粘貼

  • 修改gitosis.conf文件
    [gitosis]
    [group gitosis-admin]
    members = test@liutailin-ThinkPad-Edge ltl@it-c-015
    writable = gitosis-admin 

    [group hello]
    members = ltl@liutailin-ThinkPad-Edge ltl@it-c-015
    writable = test

    這個配置文件說明:

    members = 後面跟的必定要和 .pub的前綴一致,不然沒有訪問權限

    目前這些配置文件的修改只是在你的本地,你必須推送到遠程的gitserver上才能真正生效。 加入新文件、提交併push到git服務器:
    git add .
    git commit -am 「add test prj and users」
    git push origin master

    • gitosis-admin組成員有test@liutailin-ThinkPad-Edge, ltl@it-c-015, 該組對gitosis-admin倉庫有讀寫權限;

    • hello組有test@liutailin-ThinkPad-Edge, ltl@it-c-015兩個成員, 該組對test倉庫有讀寫權限;

測試搭建的項目庫

服務器搭建完了,而且有一個空的項目test在服務器上。接下來測試一下,空倉庫是不能clone的,因此須要某一個有寫權限的人初始化一個版本。 下面是在ltl@it-c-015客戶端完成。
mkdir test-ori
cd test-ori/
git init
echo 「/*add something*/」 > hello
git add .

git commit -am 「initial version」
git remote add origin git@<server-ip>:test.git
git push origin master
到此,test已經有了一個版本了,test倉庫的其餘成員只要先clone一下test倉庫,就能夠進行倉庫的開發了。下面是一個用戶b來克隆test:
su b
cd /home/b
git clone git@<server-ip>:test.git
cd teamwork
vim hello
git add .
git commit -am 「b add」
git push origin master
exit

在git服務器上添加已有git項目

當咱們有一個現成的git倉庫,想放到 gitserver上供team使用。以zark倉庫爲例。 

  • 首先須要從你的工做倉庫中獲得一個純倉庫, 好比你的工做目錄爲~/kernel, 你想導出純倉庫到指定路徑,而後拷貝到gitserver上去。
    git clone –bare ~/workspace/zark ~/zark.git

  • 而後把zark.git 拷貝到git服務器/home/repo/下,同時把zark.git的全部者變動爲git scp ~/zark.git git@<server-ip>:/home/repo/
    chown -R git:git /home/repo/zark.git

  • 同時須要配置 gitosis相關配置文件,增長zark倉庫的用戶

相關文章
相關標籤/搜索