精通git中文版(连载十八)

5.2 在服务器上建立Git环境 (Getting Git on a server)

  为了初始创建任何Git服务器,你需要导出一个现存的库到一个新的裸库中――一个不包含工作目录的库。这通常可以直接做到。为clone你的库来创建一个新的裸库,使用--bare选项来运行clone命令。根据约定,裸库目录以.git结尾,例如:

  $ git clone --bare my_project my_project.git

  Initialized empty Git repository in /opt/projects/my_project.git/

  这个命令的输出会让人有点迷惑。由于clone基本上会先执行git init,然后git fecth;而我们看到了git init部分的输出,它创建一个空的目录。实际的对象传输并没有给出输出,但确发生了。你现在应该在你的my_project.git目录下有一个Git目录数据的copy了。

  这大致上等同于:

  $ cp -Rf my_project/.git my_project.git

  两者在配置文件上有一些细微的差别,但对你来说,这接近于是相同的。它自己取出Git库,不包括工作目录,并创建一个独立的你指定的目录。

 

  5.2.1 向服务器上放置裸库(Putting the Bare Repository on a Server)

  现在,你有了你的库的裸copy,你所有要做的事情是把它放到一个服务器上并设置好你的协议。让我们假设你架设了一个服务器git.example.com,你可以通过SSH来访问它,你想存储所有你的Git库到/opt/git目录下。你可以通过copy你的裸库来创建你的新的库:

  $ scp -r my_project.git user@git.example.com:/opt/git

  此时,其它可以通过SSH访问同一个服务器的具有/opt/git目录读权限的用户就可以通过运行以下命令来clone你的库:

  $ git clone user@git.example.com:/opt/git/my_project.git

  如果一个SSH到服务器上的用户具有/opt/git/my_project.git目录的写权限,他们将自动具有上传权限。Git将自动增加组写权限给一个合适的库如果你运行git init时附带--shared 选项。

  $ ssh user@git.example.com

  $ cd /opt/git/my_project.git

  $ git init --bare --shared

  你看到了,取一个Git库创建一个裸库版本,并把它放在服务器上你和你的协作者们有SSH访问权限的地方;就这么容易!现在你已经准备好在同一个项目上协作了。

  需要记得的重点是:从字面上来说,所有运行一个几个人可访问的Git服务器所需要做的事情是在服务器上增加SSH可登录的帐号,把裸库放置到服务上用户具有读、写权限的地方。 你就可以进行下一步了――不需要其它事情了。

  在以下几节中,你将会看到怎么扩展到更复杂的系统中。这些讨论包括不需要为每个用户创建帐号,增加公共读权限给库,设置一个web UI,使用Gitosis工具等等。然而,请记住,在一个私有的项目上与几个人协作,你所有需要做的是一个SSH服务器以及一个裸库。

 

  5.2.2 小系统(Small Setups)

  如果你有一个小的装备或者只是想在你的组织中试一下Git;而且你只有几个开发人员,那么,事情会变得很简单。设置一个Git服务器最复杂的方面是用户管理。如果你有几个库想给一些特定的用户只读权限,而给另外的一些用户读写权限,访问和权限的安排可能就会有一点困难了。

  SSH访问 (SSH Access)

  如果你已经有了一个服务器,你所有的开发人员都有SSH访问权,在这儿设置你的第一个库通常是最容易的,因为你几乎不需要做任何工作(正如我们上节讲解的)。如果你需要在你的库上应用更复杂点的访问控制,你可以通过你的服务器上的操作系统的正常的文件系统权限来实现它。

  如果你想把你的库放置到一个并非小组中所有人都有帐号的服务器上去,那么,你必需为他们设置SSH访问能力。我们假定你有一台服务器想这么做,你已经安装了SSH服务这是你正在访问服务器的方式。

  有几种方法可以让你把权限分配给小组中的所有人。第一种是为每个人设置帐号,这很直接但也很笨。你可能不想为每个用户运行adduser并设置临时密码。

  第二种方法是在机器上创建一个单一的git用户,让每个想有写权限的用户发送给你一个SSH公钥,把这个公钥增加到你新创建的git用户的~/.ssh/authorized_keys文件中。此时,每个人都可以通过git用户来存取这台机器。这并不会在任何方面影响到提交数据你连接所使用的SSH用户不会影响到你已经记录的提交。

  另一种实现的方法是让你的SSH服务器来通过一个LDAP服务器或者其它集中化的你已经建立的认证源来实现认证。只要每个用户可以获得这台机器的shell访问权限,任何你能想到的SSH认证机制都应该能工作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值