git安装试用

      版本控制中用的比较多的就是subversion了,不过git最近发展挺快的,很多开源项目都把代码托管在github上了,最近在项目中也需要使用版本控制,所以打算直接上手git。然而,如果想与他人合作,还需要一个远程的Git仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做。因此,更好的合作方式是建立一个大家都可以访问的共享仓库,从那里推送和拉取数据。我们将把这个仓库称为“Git服务器”。

1 下载git源代码

  git官网是http://git-scm.com/,不过已经被墙,下面给出最新版的下载连接:

wget ' https://xingdaili.com/browse.php?u=lvwxzRz0SenOPL4iVWPpbyRsFbRrVUUq0d6tsV%2FmUhxzIAlTeMjGUpuQ3kZwQuyelg%3D%3D&b=6'
  Doc下载

wget 'https://xingdaili.com/browse.php?u=lvwxzRz0SenOPL4iVWPpbyRsFbRrVUUq0d6tsV%2FmUhxzIAlTeJGcB9nHn1FiHfPX1AR2ZbwVIfjuVA%3D%3D&b=6'

2 Git服务器我使用的为Debian7,提前安装相关依赖

apt-get install xmlto asciidoc autoconf build-essential gettext expat
3 源码安装git服务
tar zxvf git-1.8.3.tar.gz
cd git-1.8.3 
./configure --prefix=/usr/local
make all doc
make install install-doc install-html
  有了前面的相关依赖包的安装,源码编译的过程不会出现报错的。


4 看看你的git都安装了哪些和git相关的东西

  根据安装过程可以看到文件主要被放置在以下两个目录:

  /usr/local/bin 里面有少量git命令

  /usr/local/libexec/git-core 里面是主要的git命令

  /usr/local/share/doc/git git的帮助文档,真是多啊

5 设置git命令补全

cp git-1.8.3/contrib/completion/git-completion.bash /etc/
source git-completion.bash
6 安装完毕,看看的你git版本

7 在学习git之前,先利用/usr/local/share/doc/git把doc帮助架设起来

apt-get install apache2

cat > /etc/apache2/sites-enabled/001-default < EOF
<VirtualHost *:80>
    ServerName doc.git.com
    DocumentRoot /usr/local/share/doc/git/
    <Directory /usr/local/share/doc/git/>
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>
EOF
 重启apache之后,效果如下

8 初始化git环境,Git可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。除了 HTTP 协议外,其他所有协议都要求在服务器端安装并运行Git。

   本地协议,所谓的远程仓库在该协议中的表示,就是硬盘上的另一个目录。这常见于团队每一个成员都对一个共享的文件系统(例如 NFS)拥有访问权,或者比较少见的多人共用同一台电脑的情况。后面一种情况并不安全,因为所有代码仓库实例都储存在同一台电脑里,增加了灾难性数据损失的可能性。基于文件仓库的优点在于它的简单,同时保留了现存文件的权限和网络访问权限。如果你的团队已经有一个全体共享的文件系统,建立仓库就十分容易了。你只需把一份裸仓库的副本放在大家都能访问的地方,然后像对其他共享目录一样设置读写权限就可以了。这种方法的缺点是,与基本的网络连接访问相比,难以控制从不同位置来的访问权限。如果你想从家里的笔记本电脑上推送,就要先挂载远程硬盘,这和基于网络连接的访问相比更加困难和缓慢。

   使用的传输协议中最常见的可能就是 SSH 了。这是因为大多数环境已经支持通过 SSH 对服务器的访问 — 即便还没有,架设起来也很容易。SSH 也是唯一一个同时支持读写操作的网络协议。另外两个网络协议(HTTP 和 Git)通常都是只读的,所以虽然二者对大多数人都可用,但执行写操作时还是需要 SSH。SSH 同时也是一个验证授权的网络协议;而因为其普遍性,一般架设和使用都很容易。 SSH 的好处有很多。首先,如果你想拥有对网络仓库的写权限,基本上不可能不使用 SSH。通过 SSH 进行访问是安全的 — 所有数据传输都是加密和授权的。最后,和 Git 及本地协议一样,SSH 也很高效,会在传输之前尽可能压缩数据。SSH 的限制在于你不能通过它实现仓库的匿名访问。即使仅为读取数据,人们也必须在能通过 SSH 访问主机的前提下才能访问仓库,这使得 SSH 不利于开源的项目。如果你仅仅在公司网络里使用,SSH 可能是你唯一需要使用的协议。

   HTTP 或 HTTPS 协议的优美之处在于架设的简便性。基本上,只需要把 Git 的裸仓库文件放在 HTTP 的根目录下,配置一个特定的 post-update 挂钩(hook)就可以搞定。此后,每个能访问 Git 仓库所在服务器上 web 服务的人都可以进行克隆操作。通过 HTTP 进行推送操作也是可能的,不过这种做法不太常见。使用 HTTP 协议的好处是易于架设。HTTP 协议的消极面在于,相对来说客户端效率更低。克隆或者下载仓库内容可能会花费更多时间,而且 HTTP 传输的体积和网络开销比其他任何一个协议都大。

   Git 协议。这是一个包含在 Git 软件包中的特殊守护进程; 它会监听一个提供类似于 SSH 服务的特定端口(9418),而无需任何授权。打算支持 Git 协议的仓库,需要先创建 git-export-daemon-ok 文件 — 它是协议进程提供仓库服务的必要条件 — 但除此之外该服务没有什么安全措施。要么所有人都能克隆 Git 仓库,要么谁也不能。这也意味着该协议通常不能用来进行推送。你可以允许推送操作;然而由于没有授权机制,一旦允许该操作,网络上任何一个知道项目 URL 的人将都有推送权限。Git 协议是现存最快的传输协议。如果你在提供一个有很大访问量的公共项目,或者一个不需要对读操作进行授权的庞大项目,架设一个 Git 守护进程来供应仓库是个不错的选择。Git 协议消极的一面是缺少授权机制。用 Git 协议作为访问项目的唯一方法通常是不可取的。一般的做法是,同时提供 SSH 接口,让几个开发者拥有推送(写)权限,其他人通过 git:// 拥有只读权限。

  以上均摘自pro git。知道了各个协议的优略,下面开始实施,我打算使用ssh、http和git协议。http和git用来克隆仓库,ssh用来推送。

9 架设基于ssh协议的git仓库

  1 初始化一个仓库

cd /tmp/
mkdir mygit
cd mygit/
git init
##Initialized empty Git repository in /tmp/mygit/.git/
  2 根据mygit创建一个裸仓库mygit.git
cd /tmp
git clone --bare mygit mygit.git
##Cloning into bare repository 'mygit.git'...
##warning: You appear to have cloned an empty repository.
##done.
   就是把mygit里面的隐藏目录.git放置到 mygit.git目录里面。其实 clone 操作基本上相当于 git init 加 git fetch,所以这里出现的其实是 git init 的输出,先由它建立一个空目录,而之后传输数据对象的操作并无任何输出,只是悄悄在幕后执行。现在 mygit.git 目录中已经有了一份 Git 目录数据的副本。

  3 移动裸仓库到你想放置的目录,例如是/opt目录,本实验继续使用/tmp目录

cp -Rf /tmp/mygit.git /opt
   现在,所有对该服务器有 SSH 访问权限,并可读取 /opt目录的用户都可以用类似下面的命令克隆该项目:git clone user@address:/opt/mygit.git。如果某个SSH用户对 /opt/mygit.git 目录有写权限,那他就有推送权限。

  4 如果有多个人开发一个项目,这样为了避免为每人建立一个账号,可以使用一个公共的账号,然后加入公钥认证,这样的唯一麻烦之处就是每增加一个开发者就需要在git服务器的ssh中增加一个公钥,不过由于我的项目比较小,所以该方法看起来并不是很麻烦,如果是大型项目可以考虑使用LDAP。加入公钥认证后的效果如下:


10  架设基于http协议的git仓库

     1 使用上一节的mygit.git仓库,搭建apache服务,DocumentRoot设置为/tmp/,apache配置如下

cat > /etc/apache2/sites-enabled/000-default < EOF
<VirtualHost *:80>
    ServerName 10.1.6.190
    DocumentRoot /tmp/
    <Directory /tmp/>
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>
EOF
    进入/tmp/mygit.git目录执行以下命令:git update-server-info

    重启apache后,效果如下:



转载于:https://my.oschina.net/guol/blog/136793

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值