Chinaunix首页 | 论坛 | 博客
  • 博客访问: 924767
  • 博文数量: 245
  • 博客积分: 11429
  • 博客等级: 上将
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-15 00:16
文章存档

2011年(56)

2010年(174)

2009年(15)

分类: LINUX

2010-09-28 18:21:55

先来了解git与svn的区别吧


SVN和Git的主要区别:

Git是分布式SCM,而SVN是基于服务器的,也就是说每个开发者本地都有一套git库,每个人维护自己的版本(或者合并其他人的版本),而SVN是每个人写完代码后都及时的checkin到服务器上,进行合并。

如果上面这段话还不能让你真正了解Git的好处,而不想使用git来替代你的svn的话,那么我再列举几个我认为不错的比较直观的场景:

1、可以在本地(离线)就做好版本控制,而不用时刻连网,特别是Soho一族或者喜欢经常到处跑,又喜欢在路上、车上或者马路旁边的小凳子上coding的人;这个时候你可以在自己的Git库上进行版本控制,而不用到处找网络把代码搞到svn上去。

2、分布式的SCM更加安全和健壮,有没有想过,如果你的SVN版本服务器挂掉了(硬盘坏了或者网络不可用等等),你会咋样,能修复的好么,一旦修复不好,资料都完蛋了,而Git的分布式SCM,其中的几个节点挂掉影响并不大。

3、速度,你如果使用GoogleCode或者其他的SVN服务的话,不知道你是否有呆呆的等待chenkin完成的情况(我是经常有 的),而Git,毫无疑问,速度快的多,(就算是使用GitHub也快),究其原因,应该是Git是打包好了上传,而不像SVN单个文件上传。

4、版本、分支管理

还有啥?想不来了,差不多就这样了,视个人情况而定,但是我认为Git会让你更加满意。

但是有人可能会有这样的想法,我本地使用git,然后定时的checkin到SVN上,这样岂不是更好,啊哈,好吧,你还不习惯或者还有其他的特殊情况(比如其他开发者不喜欢git,或者原来的代码在svn上等等),这里看看如何把git和svn结合起来一起使用。

1、比较笨的方法

同时使用Git和SVN,然后再各自的“忽略”列表里面加加上对方的版本库,比如在svn的忽略列表中加上.git,而同时在git的.gitignore中加上.svn;然后执行各自的命令。

2、比较靠谱的方法

使用git-svn应该算更加科学和靠谱的方法,安装好git-svn(这个是需要单独安装的)后,就可以使用啦,基本上是这样的:

mkdir 1stlog cd 1stlog && git-svn init


git 可以在本地保存一份,比较好用,svn不能 这一点git比较好。



1. 安装 Git

      环境:192.168.188.138 服务器
      系统:centos 5.4 2.6.18-164.el
  1. 安装环境

    $ sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

编译安装

wget

tar -xzf git-1.7.1.2.tar.gz 

  cd git-1.7.1.2
  ls
  ./configure --prefix=/usr/local/git

   make all
   make install

2. 安装Gitosis
  
  1. 安装python支持

    $ sodu yum install python.i386
    // $ apt-get install python-setuptools // ubuntu的yum使用此命令
    $ wget 
    $ chmod 755 ez_setup.py
    $ python ez_setup.py
  2. 克隆和安装 Gitosis

    $ git clone git://eagain.net/gitosis.git
    $ cd gitosis
    $ sudo python setup.py install

 

3. 在服务器部署 Git

  1. 创建git用户(不要创建.ssh)192.168.188.138

    $ sudo adduser git
    $ su git
    $ cd
  2. 本地生成私钥 就是你的客户端

    $ ssh-keygen -C 'pangkuo@aa.com' -t rsa 
  3. 本地复制公钥到服务器

    $ scp id_rsa.pub root@192.168.188.138:/home/git/id_rsa.pub
  4. 修改权限

    # chown git:git id_rsa.pub
  5. 通过自己的公钥来运行gitosis-init用于初始化gitosis

    # su git
    $ gitosis-init < id_rsa.pub //Gitosis 从使用gitosis-init脚本导入的公钥尾部的描述中获取用户名
  6. 设置post-update可执行

    $ chmod 755 repositories/gitosis-admin.git/hooks/post-update
  7. 本地克隆 Gitosis 的控制仓库(在客户端)

  8.  $ git clone git@192.168.192.168.188.138:gitosis-admin.git

       添加一个新的项目,更改gitosis.conf 
         [gitosis] 这个是建立的时候存在的
          [group gitosis-admin]
          writable = gitosis-admin
          members = josie@iccd.com
          [group mobile] #新建项目名称
          writable = mos#项目名
          members = pk #用户名

添加用户公钥

把用户的公钥复制一份修改成pk.pub,放入gitosis-admin/keydir/
$ git commit -am "add 添加用户pk并添加项目mos"
$ git push

本地创建一个仓库并push上去:

$ mkdir mobile
$ cd mobile
$ git init
$ touch .gitignore
$ git add .gitignore
$ git commit -am "init commit"
$ git remote add origin git@192.168.188.138:mobile.git
$ git push origin master


git 和svn 一样有自己的图形工具很方便管理

4.git与web 结合
执行下面的命令即可

/usr/local/git/bin/git clone file:///home/git/repositories/gitosis-admin.git/ /var/www/html/pk
                                       版本库                                       web目录
Cloning into /var/www/html/pk...
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 15 (delta 4), reused 1 (delta 0)
Receiving objects: 100% (15/15), done.
Resolving deltas: 100% (4/4), done.

创建完毕!

错误:
fatal: '/home/git/repositories/idea-generator.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
说明你的密钥有问题,重新设置
看看ls -a 有这些文件
. .. .bash_history .bash_logout .bash_profile .bashrc
gitosis .gitosis.conf id_rsa.pub .mozilla repositories .ssh

#ls
gitosis id_rsa.pub repositories
ll 权限
drwxr-xr-x 2 git git 4096 Sep 29 16:47 gitosis
-rw-r--r-- 1 git git  402 Sep 29 16:03 id_rsa.pub
drwxr-xr-x 3 git git 4096 Sep 29 16:16 repositories

如果都正确的话 还不行 就重新设置密钥了
删掉 .ssh
然后在重新执行上面密钥那部分 2--6 步骤
初始化git目录

错误2:gitosis-init < id_rsa.pub 报错
python错误 权限是否正确 要到git用户下执行
  File "/usr/lib/python2.4/site-packages/gitosis-0.2-py2.4.egg/gitosis/init.py", line 75, in init_admin_repository
    template=resource_filename('gitosis.templates', 'admin')
  File "/usr/lib/python2.4/site-packages/gitosis-0.2-py2.4.egg/gitosis/repository.py", line 51, in init
    close_fds=True,
  File "/usr/lib/python2.4/subprocess.py", line 419, in call
    return Popen(*args, **kwargs).wait()
  File "/usr/lib/python2.4/subprocess.py", line 550, in __init__
    errread, errwrite)
  File "/usr/lib/python2.4/subprocess.py", line 993, in _execute_child
    raise child_exception
OSError: [Errno 13] Permission denied

编译错误3
make[2]: Leaving directory `/opt/git/git-1.7.1.2'
    ASCIIDOC git-add.xml
/bin/sh: line 1: asciidoc: command not found
make[1]: *** [git-add.xml] Error 127
make[1]: Leaving directory `/opt/git/git-1.7.1.2/Documentation'
make: *** [install-doc] Error 2
   缺包:安装asciidoc






图形工具下载:


客户端:
git:
参考:http://www.bitsun.com/documents/gittutorcn.htm

阅读(1995) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~