Git / Gitolite 的应用学习

简介:

前面写了svn相关的配置和学习,我们自己目前在用的也是svn。其大多为开发在用,且权限也分配的很精细。所以一般不需要过多的操作什么。备份方面,除了脚本备份,还有共享存储。所以一般也不会有什么问题。

趁这几天顺便把Git也学习下,以防以后会用到这个。Git的好处就不在此多说了,相比svn那也可以罗列很多出来。另一个,git和github结合也是很好的,冲这个也应该学习下。

由于之前的svn用到了很精细的权限控制,所以这里结合Gitolite来一起学习下。所以就分server和client。

一、Client端:

Linux下如果有就不需要在安装了,有没有用命令看下就好,直接在命令行敲 git 不报错即OK。没有用yum安装git就好了,windows下到官网下载安装包,直接下一步就OK。Git官网:http://git-scm.com/download/ 如果你打不开,那你懂的......

windows下安装OK了,会有Git Bash的命令行工具。点击进去后如下:

wKiom1TdgjjgA27wAAEHkhpn8Qs587.jpg

运行正常的话,我们来生成个秘钥,来为以后管理git使用。我已经生成过了,所以这里命令就不执行了。执行ssh-keygen -t rsa一路回车即可在当前用户的家目录下生成秘钥。

wKiom1TdonLg5HxHAADbitOPnKI801.jpg

现在要把公钥重命名下(为了方便识别用户)并上传到准备安装Git的服务器做认证。

wKiom1Tdo8zQea_gAADq1olVPMw188.jpg

目前为止,client可以先做这么多了,如果是Linux的client,也是一样的操作。相对更方便些。



二、Server端:

目前CentOS6已经集成了Git,所以无需再去安装Git,但是要用到Gitolite,就需要安装了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# cat /etc/issue
CentOS release  6.2  (Final)
  
# rpm -qa git
git - 1.7 . 1 - 2.el6_0 . 1.x86_64
  
# 新建仓库目录
# mkdir /src/project -pv
  
# 新建git用户管理git
# useradd git
  
# 做一个仓库的链接到家目录下的
# chown -R git.git /src
# su - git
$ ln  - sv  / src / project  / home / git / repositories
  
# clone gitolite仓库
$ git clone git: / / github.com / sitaramc / gitolite
$ pwd
/ home / git / gitolite
$ . / install  - - help                     # 可以查看安装的一些参数说明等信息
$ mkdir .. / bin                         # 在家目录创建一个bin目录来安装
$ . / install  - to  / home / git / bin /         # 就是cp目录下的src目录
  
# 使用公钥创建初始化版本库
$ gitolite setup  - pk  / tmp / chenfeng.pub 
Initialized empty Git repository  in  / src / project / gitolite - admin.git /
Initialized empty Git repository  in  / src / project / testing.git /
# 这样就说明成功了。
$ pwd
/ home / git / repositories
$ ls
gitolite - admin.git  testing.git        # 可以看到两个目录,一个账户管理的,一个测试的
  
# 现在client就可以clone版本库,并进行用户管理和代码编写工作了。

签出版本前,我们可以测试下ssh的公钥认证是否成功:

wKioL1TdqZmAmWKBAAEqZ9dID8Y146.jpg

如上信息。说明ssh公钥认证已正常。而且也显示了对哪些库有什么权限。否则就要检查。


三、客户端签出版本库

服务器端的Git是为了用户共享项目的,所以不应该直接在服务器上操作。这里就在客户端签出并管理用户和版本库。

wKiom1TdqRDS5QazAAHFdrXz8gw513.jpg

从上面可以看到,版本库签出正常。可以看到签出的gitolite-admin管理库下有两个文件夹

conf: 配置用户权限的文件夹

keydir: 公钥存放位置

下面对这两个进行说明:

wKiom1TdqcfSj_BrAAE-v0wetpY464.jpg

从内容就很容易看到我们上次的ssh测试时看到权限的定义。此时我们把testing这个库的权限更改下来测试看下效果:

wKioL1TdrHWCGONCAALSL7PNGF8550.jpg

上述的几个命令的意思:

git add .: 添加已修改的文件到暂存区

git commit -am "some information": 把已修改的文件都添加到暂存区并提交到仓库

git push origin master: 推送到Git服务器到主版本

明白上述几个参数的意思后,现在来看在同步testing的库的时候看看是什么结果:

wKioL1Tdrtfi-Ez0AAFY1qYPgmk105.jpg

此时就报错了,提示没有权限或者访问的库不存在。从这里就可以看到简单的权限控制了,其实跟svn的差别不是很大。


四、设置其他用户权限

现在本地的windows客户端已经是管理员权限了,假设我们又有一台Linux的客户端也需要使用,如果给他权限,下面就来演示:

首先生成秘钥:

1
2
3
4
5
6
# ssh-keygen -t rsa
# cd .ssh/
# mv id_rsa.pub 104.pub     # 重命名是为了方便识别的
# yum -y install lrzsz
# sz 104.pub                # 下载到windows上,并放到windows上的gitolite-admin下的keysdir
# mkdir -pv /src/project    # 新建版本库的目录

添加完成后,我们在windows客户端操作,使Git服务器识别该主机的信息

wKioL1TdsSGCmhFeAAKJKPOlvw8999.jpg

1、我们首先把104加到testing库的权限上

2、git status: 可以查看当前的工作区的状态信息(修改、新增等)

wKioL1TdtXzgPWs4AAGSVgj6u_0863.jpg

wKiom1TdtISiR9MeAAH5b5HoK2A293.jpg

这里直接省略了origin master这参数,可能会有警告。上述就是提交后并推送到服务器。此时,104这台机器对testing库就拥有了读写和更新的权限。这里的用户是和公钥的名称一致的。

在Linux 104客户端做测试:

1
2
3
4
5
6
7
# cd /src/project
# git clone git@10.95.10.103:testing
Initialized empty Git repository  in  / src / project / testing / .git /
warning: You appear to have cloned an empty repository.
# ls
testing
# 这里看到可以正常clone下一个testing库。因为testing库里面没有任何内容。所以提示为空

到此,添加用户以及授权基本完成。并学习了几个命令。


五、新建项目库并同步到服务器和其他用户协同工作

1、首先要先在服务器注册库并分配权限

wKioL1TduaHBFSgIAAHD8282w-c966.jpg

git diff: 可以显示修改的文件内容。

从上述可以看到

新增了一个用户组:@platform_team,且有两个用户chengfeng 104

新增了一个库:platform,且该组有读写更新权限,所有人有读权限

wKiom1Tdz3-SxWgdAALhMEkvrVQ751.jpg

此时,push后会自动在服务器端创建一个注册的库。

然后可以在Linux客户端和windows客户端同时clone下来platform库。

1
2
3
4
5
6
# git clone git@10.95.10.103:platform
Initialized empty Git repository  in  / src / project / platform / .git /
warning: You appear to have cloned an empty repository.
# ls
platform  testing
# 现在可以看到库了。


2、创建第一个README文件

wKiom1Td0gmiXZYkAAKKHneQc54820.jpg

上面添加了一个README文件。并推送到了Git服务器。现在Linux客户端可以pull到最新的类容了。

1
2
3
4
5
6
7
8
9
10
11
12
# cd platform/
# git pull                    # 拉取Git服务器的最新数据
remote: Counting objects:  6 , done.
remote: Compressing objects:  100 %  ( 2 / 2 ), done.
remote: Total  6  (delta  0 ), reused  0  (delta  0 )
Unpacking objects:  100 %  ( 6 / 6 ), done.
From  10.95 . 10.103 :platform
  *  [new branch]      master      - > origin / master
# ls
README
# cat README 
This  is  Git Test  File .

现在就可以看到两台机器都有数据了。权限也是生效的。


六、Git的一些其他命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# git commit -m "add two lines."
[master  0cf7775 ] add two lines.
  Committer: root <root@localhost.localdomain>
Your name  and  email address were configured automatically based
on your username  and  hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
 
     git config  - - global  user.name  "Your Name"
     git config  - - global  user.email you@example.com
 
If the identity used  for  this commit  is  wrong, you can fix it with:
 
     git commit  - - amend  - - author = 'Your Name <you@example.com>'
 
#上述提示的是因为我们在Linux客户端第一次提交修改,所以需要设置一些参数,可以设置为全局参数,也可以每次提交时都写用户和邮箱。下面我们设置全局参数。
# git config --global user.name "104"
# git config --global user.email "104@admin.com"
# git add .
# git commit -m "add two lines."
# git push origin master
Counting objects:  5 , done.
Compressing objects:  100 %  ( 2 / 2 ), done.
Writing objects:  100 %  ( 3 / 3 ),  290  bytes, done.
Total  3  (delta  0 ), reused  0  (delta  0 )
To git@ 10.95 . 10.103 :platform
    fe2f251.. 0cf7775   master  - > master
# 现在提交推送都正常了。

现在我们在windows上checkout出最新版本:

wKioL1TfBH2Tu5xKAADeSbA_Crs527.jpg

现在假如我们做了一些错误的修改,并且提交了。想回到为提交之前的版本:

wKioL1TfBbvCgqmQAAFakZSYQUI241.jpg

上面可以看到我删除了两行,也添加了新行。

wKioL1TfBhGTgRlsAAEO3B8MbqI350.jpg

可以看到已经回到了刚刚更新的状态。命令如下:

git reset --hard HEAD^: 回到所有内容到上个版本,上上个就是:HEAD^^,上10个就是:HEAD~10

还有很多相关的命令需要慢慢去了解。

git revert HEAD: 撤销某次提交,并生成一个新的提交

命令太多。以后用到再说...


本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1614490,如需转载请自行联系原作者

相关文章
|
Linux 开发工具 C语言
Linux的学习之路:7、yum与git
Linux的学习之路:7、yum与git
205 0
|
API 开发工具 git
git常用的API以及每个的应用场景
【4月更文挑战第5天】Git是流行的分布式版本控制系统,用于代码管理,提供丰富的API。本文概述了Git常用API,如`git init`(初始化仓库)、`git add`(添加到暂存区)、`git commit`(提交)、`git remote add origin`(添加远程仓库)、`git pull`和`push`(同步远程仓库)、`git branch`(分支管理)以及`git checkout`(切换分支或恢复文件)。了解和熟练使用这些API能提升开发效率和代码质量,更多Git功能可参考官方文档。
811 0
|
测试技术 持续交付 开发工具
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
333 2
|
开发工具 git
学习Git的最佳实践有哪些?
遵循这些最佳实践,能让你更高效地使用 Git,更好地管理项目的版本和协作。
|
存储 开发工具 git
Git 学习----基本概念
理解这些基本概念是掌握 Git 操作的重要基础,它们为有效地管理项目的版本和开发过程提供了支持。通过不断实践和使用 Git,开发者可以更加高效地协作和管理项目的演变
|
Linux 网络安全 开发工具
Git学习笔记(一):基础与应用
本文档详细介绍了如何将本地项目关联到Gitee上的空仓库并上传代码,以及如何验证本机与Git服务器的SSH连接。同时,还概述了Git的基本概念、安装步骤、初始配置、常见命令及如何配置多个SSH-Key,适用于初学者快速上手Git操作。
346 51
Git学习笔记(一):基础与应用
|
存储 网络安全 开发工具
【GIT】Git常用命令学习
【GIT】Git常用命令学习
191 1
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
320 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
1127 1
git学习三:git使用:删除仓库,删除仓库内文件
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
1781 0