代码改变世界

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

2012-06-03 21:15  BAsil  阅读(4199)  评论(0编辑  收藏  举报

之前项目组使用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,是不对的。