2024年3月7日发(作者:)

北大青鸟中关村

Git环境搭建(3)---测试

1、安装git客户端

访问git官网,下载安装包(许多Windows上的git服务都以msysgit作为支撑支撑软件,建议读者安装):

下载后按默认配置安装完毕,会出现命令行工具:1、接下来的pc端工作在命令行内完成:

测试能否ssh登录远程主机:

$ cd ~

$ sshgitadmin@host --远程登录

由于无法确认远程host主机的真实性,shell会告诉你它的公钥指纹让你确认,键入yes:

Are you sure you want to continue connecting (yes/no)? yes

输入远程主机gitadmin的密码,正常情况下这里就能够登录成功,显示gitadmin用户

$ exit --退出远程登录

配置免密码登陆:

北大青鸟中关村

$ ssh-keygen -t rsa --生成本机密钥,公钥默认在~/.ssh/id_

未使用gitosis情况下执行:

$ ssh-copy-id gitadmin@host --上传公钥,远程主机host为服务器IP

使用gitosis管理公钥则执行:

$ scp ~/.ssh/id_ gitadmin@host:/tmp --远程拷贝公钥至服务器临时目录

2、可视化工具

在安装官方git的同时,它也给我们提供了gitk和git-gui两种可视化工具:

gitk是一个历史记录的图形化查看器。

cd 到一个Git仓库,然后键入:

$ gitk [git log options]

git-gui则主要是一个用来制作提交的工具:

$ gitgui

注意:

本部分末参考链接里有官网推荐的Git图形化客户端(github上还有更多选择),更亲近不熟悉命令行的使用者。由于这一部分的选择较多,但究其实现原理还是一样的,所以这里就不做延伸。请使用者参考本文或搜索自行选择的客户端相应教程进行配置。

Ubuntu服务器端下:

1、管理gitosis:

$ cd ~

北大青鸟中关村

$ git clone gitadmin@host:/home/gitadmin/

$ cd gitosis-admin/

接下来各个用户按照前面安装配置gitosis时提到的办法生成各自的ssh公钥文件后,scp上传到服务器/tmp目录下,也可由服务器管理员手动取得,并最终重命名为各用户名后拷贝到keydir目录下,就能实现使用git协同作业了。

2、文件讲解:

[gitosis]

[group gitosis-admin]

writable = gitosis-admin

members = a@server1

[group developers]

writable = helloworld

members = a@server1 b@server2

[group test]

readonly = helloworld

members = c@server3

这个配置文件表达了如下含义:gitosis-admin组成员有a,该组对gitosis-admin仓库有读写权限; developers组有a,b两个成员,该组对helloworld仓库有读写权限; test 组有c一个成员,对helloworld仓库有只读权限。当然目前这些配置文件的修改只是在你的本地,你必须推送到gitserver上才能真正生效。

北大青鸟中关村

操作方法:

加入新文件、提交并推送到git服务器:

$ git add . --添加命令,这里的点’.’表示当前目录

$ git commit -am "add helloworld project and users" --提交,并描述此次行为

$ git remote add origin ssh://gitadmin@host:

添加远程主机

$ git push origin master --推送到服务器master分支

这里介绍远程主机URL修改方法,需要进到待修改仓库目录下:

方法一:先删除$ git remote rm origin 再添加$ git remote add origin

URL

方法二:$ git remote set-url origin URL

方法三:进入.git目录下修改config文件

3、演示操作

现在我们来添加一个新项目。为此我们要建立一个名为mobile的新段落,在其中罗列手机开发团队的开发者,以及他们拥有写权限的项目。由于 'gitadmin' 是系统中的唯一用户,我们把他设为唯一用户,并允许他读写名为iphone_project的新项目:

[group mobile]

members = gitadmin

writable = iphone_project

修改完之后,提交gitosis-admin 里的改动,并推送到服务器使其生

北大青鸟中关村

效:

选择目录创建裸仓(本步骤可省略,我们不用事先到服务器上手工创建该项目的裸仓库,Gitosis会在第一次遇到推送时自动创建):

$ mkdiriphone_

$ sudogitinit --bare iphone_

$ sudochown -R gitadmin:gitadminiphone_

添加新工程并提交用户组:

$ git commit -am 'add iphone_project and mobile group'

在新工程iphone_project首次推送数据到服务器前,得先设定该服务器地址为远程仓库,注意使用gitosis可以不用指明完整路径,只需要一个冒号加项目名字即可,Gitosis会自动帮你映射到实际位置:

$ git remote add origin gitadmin@host:iphone_

推送到服务器:

$ git push origin master

要和朋友们在一个项目上协同工作,就得重新添加他们的公钥。不过这次不用在服务器上一个一个手工添加到 ~/.ssh/authorized_keys文件末端,而只需管理keydir目录中的公钥文件(文件的命名由中用户的标识名决定),并修改,最后用前面的方法推送到服务器配置生效。

现在我们为 John,Josie 和 Jessica 添加公钥:

$ cp /tmp/id_ keydir/

$ cp /tmp/id_ keydir/

北大青鸟中关村

$ cp /tmp/id_ keydir/

然后把他们都加进 'mobile' 团队,让他们对iphone_project具有读写权限:

[group mobile]

members = scott john josiejessica

writable = iphone_project

如果你提交并推送这个修改,四个用户将同时具有该项目的读写权限。

Gitosis也具有简单的访问控制功能。如果想让John只有读权限,可以这样做:

[group mobile]

members = scottjosiejessica

writable = iphone_project

[group mobile_readonly]

members = john

readonly = iphone_project

现在 John 可以克隆和获取更新,但Gitosis不会允许他向项目推送任何内容。像这样的组可以随意创建,多少不限,每个都可以包含若干不同的用户和项目。甚至还可以指定某个组为成员之一(在组名前加上 @前缀),自动继承该组的成员:

[group mobile_committers]

members = scottjosiejessica

[group mobile]

北大青鸟中关村

members = @mobile_committers

writable = iphone_project

[group mobile_another]

members = @mobile_committers john

writable = another_iphone_project

如果遇到意外问题,试试看把loglevel=DEBUG 加到 [gitosis] 的段落,即把日志设置为调试级别,记录更详细的运行信息。如果一不小心搞错了配置,失去了推送权限,也可以手工修改服务器上的

/home/git/.文件,因为Gitosis实际是从该文件读取信息的。它在得到推送数据时,会把新的存到该路径上。所以如果你手工编辑该文件的话,它会一直保持到下次向gitosis-admin 推送新版本的配置内容为止。