ubuntu下安裝git server以及eclipse egit插件配置


之前項目組使用svn做版本控制,嘗試了一下git+svn(就是git客戶端+svn服務器配置),但總感覺無法將git的強大功能體現出來,於是打算在服務器上配置git server並且給出eclipse egit插件客戶端的操作。本文參考了ubuntu官網以及部分網友的blog,文中如引用均給已出相應連接。

1.配置環境

客戶端

筆記本:Thinkpad T400

內存:6GB 1067MHz DDR3

OS : Window 7 professional 64bit  sp1

Eclipse : Indigo (Java EE)

服務器

OS :  Ubuntu 9.10 (Karmic) Server

2.服務器環境

由於服務器使用Ubuntu 9.10版本較低,在使用apt-get install git-core時提示要使用apt-get update。不過在apt-get update的時候報了很多錯誤,查了一下,原因是8.10,9.04,9.10,10.10等版本官方均已經停止更新,需要修改sources.list文件(/etc/apt/sources.list),改為

deb http://old-releases.ubuntu.com/ubuntu/ karmic main  restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic main  restricted
deb http://old-releases.ubuntu.com/ubuntu/ karmic-updates main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic-updates main  restricted
deb http://old-releases.ubuntu.com/ubuntu/ karmic universe
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic universe
deb http://old-releases.ubuntu.com/ubuntu/ karmic-updates universe
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic-updates universe
deb http://old-releases.ubuntu.com/ubuntu/ karmic multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic multiverse
deb http://old-releases.ubuntu.com/ubuntu/ karmic-updates multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ karmic-updates multiverse

然后使用apt-get update,不過old-releases.ubuntu.com訪問速度非常慢而且沒有鏡像,所以可能需要執行很長的時間(我花了大概4個小時,郁悶)。更新完成后,可以進行后續安裝了。

當然如果你使用的ubuntu版本高於10.10,那可以跳過步驟2,直接進入3。

3. git服務器

第3部分主要參考了ubuntu官網Git服務器Gitosis安裝設置,紅字部分是個人補充

      3.1、安裝 openssh服務器

     sudo apt-get install openssh-server openssh-client

      3.2、創建個人公鑰和私鑰 (如果在服務器下,會以當前用戶名創建)

           在默認用戶的主目錄路徑下,運行以下命令,按照提示創建公鑰和私鑰

     ssh-keygen -t rsa

           默認生成2048位,如果需要提高安全級別,也可以通過下面的命令創建公鑰和私鑰

     ssh-keygen -t rsa -b 4096

           默認情況下,公鑰和私鑰會保存在~/.ssh目錄下,如下所示:

     id_rsa  id_rsa.pub  known_hosts

      3.3、安裝 git服務器

     sudo apt-get install git-core

      3.4、配置 git服務器

          創建git服務器管理用戶

     sudo useradd -m git
     sudo passwd git

          創建git倉庫存儲目錄

     sudo mkdir /home/git/repositories

          設置git倉庫權限

     sudo chown git:git /home/git/repositories
     sudo chmod 755 /home/git/repositories

          初始化全局設置

     git config --global user.name "myname"
     git config --global user.email "myname@server"

      3.5、安裝python的setup tool

     sudo apt-get install python-setuptools

      3.6、獲取並安裝gitosis

 
 
 
         
  
  
  
           cd /tmp git clone git://eagain.net/gitosis.git
 
 
 
         
     此處git地址已經失效,網上給出其他的也不能clone,沒辦法下載gitosis打包文件,解壓繼續。
     cd gitosis
     sudo python setup.py install

      3.7、配置gitosis

     cp ~/.ssh/id_rsa.pub /tmp
     sudo -H -u git gitosis-init < /tmp/id_rsa.pub
     執行后在/home/git/repositories/下會出現gitosis-admin.git文件夾,gitosis同樣使用git來進行管理,因此我們需要git clone后修改,並執行commit和push使配置生效
     sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

     3.8、管理gitosis配置

     cd ~
     git clone git@hostname:用戶名/gitosis-admin.git
     此處應改為git clone git@hostname:gitosis-admin.git,也不要寫成git clone git@202.194.254.21:home/git/repositories/gitosis-admin.git否則會報gitosis.serve.main:Repository read access denied。這個錯誤我一開始一直認為是gitosis.conf中的配置有問題,實際上是路徑問題
     cd gitosis-admin/

        各個用戶按照前面提到的辦法生成各自的ssh公鑰文件后,服務器管理員把所有人的 ssh公鑰文件都拿來,拷貝到keydir目錄下。

        在linux和mac下可以使用scp命令遠程拷貝,在window下,可以使用winscp(圖形界面),注意生成的pub文件用文本編輯器打開取文件內容最后顯示的完整用戶名, 比如我的tangtang@THINK,作為pub文件的文件名tangtang@THINK.pub,拷貝到keydir目錄下

        修改gitosis.conf文件,如下所示

    [gitosis]
    [group gitosis-admin]
     writable = gitosis-admin
     members = tracker@issue-tracker
    [group developers]
     writable = helloworld
members = tangtang@THINK b@server2
    [group test] 
     readonly = helloworld
     members = c@server3

         這個配置文件表達了如下含義:gitosis-admin組成員有tracker@issue-tracker,該組對gitosis-admin倉庫有讀寫權限; developers組有tangtang@THINKb@server2兩個成員,該組對undergraduate倉庫有讀寫權限; test組有c@server3一個成員,對helloworld倉庫有只讀權限。 當然目前這些配置文件的修改只是在你的本地,你必須推送到gitserver上才能真正生效。 加入新文件、提交並push到git服務器:

        這里首先確保在git clone后的gitosis-admin/文件夾下,使用

    git add .
    git commit -am "add users"
    git push
    經過以上步驟,服務器配置完畢
4.創建git項目
         下面我們在客戶端創建git項目,並push到服務器上,這里eclipse的egit插件好像在創建git項目時有問題,所以我們仍然使用git命令行形式
         mkdir helloworld
cd helloworld
git init
touch a.txt
git add .
git commit –am “add a.txt”
git remote add helloworld git@hostname:helloworld.git
git push helloworld master
    成功后會顯示

         Initialized empty Git repository in /home/tangtang/helloworld/.git/
        Enter passphrase for key '/home/tangtang/.ssh/id_rsa':
        remote: Counting objects: 24, done.
        remote: Compressing objects: 100% (24/24), done.
        remote: Total 24 (delta 5), reused 4 (delta 0)
        Receiving objects: 100% (24/24), done.
        Resolving deltas: 100% (5/5), done.

        此時,hellworld已經被push到git server上

5. window eclipse git配置
        eclipse下egit插件安裝比較簡單,選擇Help->Install New Software輸入http://download.eclipse.org/egit/updates,按照提示安裝即可

        5.1  選擇File->Import->Git/Projects from Git

        5.2  Select a Git Repository 選擇Clone 在URI中輸入ssh://git@hostname/home/git/repositories/helloworld.git 或者git@hostname:/home/git/repositories/helloworld.git 注意這里不能使用在git命令行下使用的git@hostname:helloworld.git,否則總是報錯,現在不確定是否是因為window的原因(抽空用mac os試下)

        5.3  Branch Selection

         branchselection

      5.4 Local Destination

         localdestination

         Finish后從git server clone項目,直至完成

     5.5  Git Repositories 查看本地及remote狀態(Window->Show View->Other->Git Repositories)

          Git Repositories

           可以看到Remotes/origin下有Fetch和Push兩個路徑,注意Fetch的配置

           fetchconfig

           紅框部分是要求把remote origin下的所有分支都fetch到本地

           然后是Push的配置

            pushconfig

     5.6

           如果使用了私鑰,可以進行如下配置

           ssh

           如果不使用ssh的話,我發現在沒有安裝window的eclipse下也能正常使用,不知道git是否通過別的協議傳輸(沒有配置http以及https),這點沒有搞清楚,還請大家不吝賜教。

配置完畢后,我們可以通過使用eclipse egit插件進行源代碼管理了

 

[Update 1 2013-01-08]

1 3.7使用的是服務器上的公鑰創建gitosis-admin倉庫,默認就是gitosis-admin的管理員了,但實際上我們可以通過修改gitosis-admin/gitosis.conf 文件添加客戶端的管理員

比如

[group gitosis-admin]
writable = gitosis-admin
members = admin tangtang

2 創建公鑰密鑰的方式

重點說一下window,在window下,因為我們訪問openssh server,所以必須使用openssh兼容的格式,這里如果你安裝了msysgit 可以使用

   ssh-keygen -t rsa -C "yourname" 
生成用戶名為yourname的公鑰和密鑰,這里建議使用-C參數(否則會生成yourname@機器名的公鑰密鑰,后面我不管怎么設置均無法成功登陸)

把生成的id_rsa.pub復制一份,更名為yourname.pub 並通過winscp 到 你提前在服務器上clone的那個gitosis-admin倉庫的keydir文件夾下,然后執行git commit和git push。當然如果你在客戶端已經可以操作gitosis-admin的話,亦可以放到客戶端的gitosis-admin的keydir下並同樣執行git commit 和git push

3 當你使用客戶端工具比如git extension等克隆倉庫時,注意倉庫的url 應該是 ssh://git@remote-server-url/repositoryname.git 我之前總是把git用戶名設置為之前創建的yourname,是不對的。

          

   
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM