代码管理平台——svn、git、github、gitlab

代码管理平台

一、代码管理平台介绍

版本控制,记录若干文件内容变化,以便将来查阅特定版本修订情况

版本管理工具发展史:cvs-->svn-->git

svn:全称subversion,是一个开源版本控制系统,始于2000年

git是Linux的创始人linus发起的,2005年发布。

git与svn不同在于git不需要依赖服务端就可以工作,即git是分布式的。

githup是基于git的在线web页面代码托管平台,可以选择付费服务。

gitlab可以认为是一个开源的github,两种没有直接关系。

二、安装svn

首先安装subversion

[root@localhost ~]# yum install -y subversion

创建项目目录,并初始化文件,创建svn资源仓库

[root@localhost ~]# mkdir -p /data/svnroot/myproject             //创建svnroot/myproject多层目录 
[root@localhost ~]# ls -la /data/svnroot/myproject
总用量 0

e16e80b9688238ee704034bcb6adc95cafe.jpg

查看其目录下的配置文件目录;authz :控制权限; passwd :密码文件 ;svnserve.conf :仓库的配置文件

053804338b35d3db18e562c51b692380ecc.jpg

在authz文件中,增加以下内容

[root@localhost conf]# vim authz 

[groups]                //此处为标志,下面内容写在此处


admins = aming,user1    //定义用户组

[/]                    //根目录,指的是 /data/svnroot/myproject/
@admins = rw           //所定义用户组,赋予rw权利
* = r                  //除admins组外,给所有用户,r的权利

[myproject:/]          //项目名称,可以是/data/svnroot/下多个项目
user1 = rw             //user1用户具有rw权利

编辑passwd文件,增加以下内容:

[root@localhost conf]# vim passwd

[users]

aming = 123456          //定义ying用户的密码
user1 = 123456         //定义user1的用户密码

配置svnserve.conf文件,添加以下内容

[root@localhost conf]# vim svnserve.conf 


[general]                          //此处为标志,下面内容写在此处

anon-access = none                 //匿名用户,无权利
auth-access =  write               //用户名密码登录,可以写
password-db = passwd               //用户的密码存在passwd文件
authz-db = authz                   //权限控制在authz文件
realm = /data/svnroot/myproject    //对此项目生效(处需要绝对路径)

配置完文件,现在可以启动svn;

命令:svnserve -d -r /data/svnroot/ 解释: -d :后台模式(daemon mode) ; -r :要服务的目录的根目录

75f495845330fa8b7ff1bb20be25412aff0.jpg

在启动svn服务之前要进行查看一下有有没有iptables,有的话会影响后面的使用

三、客户端上使用svn(linux)

机器配置:

服务器:01 192.168.126.128

客户端:02 192.168.126.129

首先在客户端02安装svn

[root@localhost ]# yum install -y subversion

在客户端上创建myproject副本并指定用户名的方式创建

[root@localhost ~]# svn checkout svn://192.168.126.128/myproject/ --username=aming
认证领域: <svn://192.168.126.128:3690> /data/svnroot/myproject
“aming”的密码:

-----------------------------------------------------------------------
注意!  你的密码,对于认证域:

   <svn://192.168.126.128:3690> /data/svnroot/myproject

只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
取出版本 0。
[root@localhost ~]# ls
1.txt  2.txt  anaconda-ks.cfg  myproject
[root@localhost ~]# ls -la myproject/
总用量 4
drwxr-xr-x  3 root root   18 2月  28 09:37 .
dr-xr-x---. 9 root root 4096 2月  28 09:37 ..
drwxr-xr-x  4 root root   75 2月  28 09:37 .svn

在客户端创建一个文件,传输到服务器

[root@localhost myproject]# cp /etc/fstab ./
[root@localhost myproject]# ls
fstab
[root@localhost myproject]# svn add ./fstab
A         fstab
[root@localhost myproject]# svn commit -m "add ./fstab"
正在增加       fstab
传输文件数据.
提交后的版本为 1。

在本地删除文件:svn delete filename

b7d1efecc95ad106e2330958f4a8604309b.jpg

查看变更日志:svn log

[root@localhost myproject]# svn log

四、客户端上使用svn(windows)

打开官网下载最新版TortoiseSVN:https://tortoisesvn.net/index.zh.html

下载中文简体的语言包

软件安装后,在桌面创建一个myproject的文件夹,并右键,选择SVN检出

填写服务端的库,然后确定

1dce374fd7d9410775525aab4ec58f5b056.jpg

输入用户名密码之后就能看到下面的图示说明配置正确

4d649626c6191007870bf95be0f78bf71a7.jpg

配置完毕后,现在开始做测试;在桌面myproject的文件夹创建test.txt

4b50f3aabbedfbe887abde5c579a6df3d74.jpg

点击右键,选择TortoiseSVN > 加入

此时文件上出现蓝色加号(+),在点击右键,选择SVN提交

此时添加已经完成,点击确定

434cc871b981d923dd530de144a6db25781.jpg

4b2ec0a1c9590f3f795caed2c1932b62cc8.jpg

此时客户端已经加载完成,现在服务端,进行查看

d22ace4d6025e9960062f809a0296d5f67a.jpg

五、单机上使用git

安装git

[root@localhost ~]# yum install -y git

 创建gitroot目录,初始化gitroot

[root@localhost ~]# mkdir /data/gitroot/
[root@localhost ~]# cd /data/gitroot/
[root@localhost gitroot]# git init
初始化空的 Git 版本库于 /data/gitroot/.git/

在gitroot目录下面新建一个文件,然后给增加到服务器上面去用法和svn类似

d7a30bfb131e1e92e92017a2c7660baa9f0.jpg

上面再增加的时候出现了报错,按照报错的格式进行操作

e0202bf889517270c9b7675846661bf009a.jpg

此时在提交git.txt文件

82f4b51bd9ea0f145839e57fa77515e50ae.jpg

git status:查看当前仓库中的状态,比如是否有改动的文件

8203d65d3fd1d2888c4154f7ac1e0e3f819.jpg

b69c7d1ea027933e26f127ee297d347232e.jpg

git diff :可以对比1.txt本次修改了什么内容,相比较仓库里面的版本

adda15c378eb8e0c22a5467315ba9c94794.jpg

git log :查看所有提交记录;格式比较繁琐,有之前定义的邮箱和用户名

c55202bb03215caa02a10858f57648900c9.jpg

git log :查看所有提交记录;格式比较繁琐,有之前定义的邮箱和用户名

cb88053f67279210a04f9b8ca75b2cb7179.jpg

查看日志的时候,可以定义一行:git log --pretty=oneline

b1d60acb17a24a656836126bf15238abf26.jpg

回退版本,其中后面跟的字符串是简写: git reset --hard ID

3e428c93d9fbe8fe53484932155124dca88.jpg

git reflog :查看所有历史版本

82c32433e7753afd50619842edd302fd7a7.jpg

git checkout -- 1.txt :恢复1.txt

300fff3f30b6701d8804d64421d9a03255c.jpg

再写入一行内容,增加到仓库,有撤销增加 :git reset HEAD 1.txt

[root@localhost gitroot]# echo "Git" >> 1.txt
[root@localhost gitroot]# git add 1.txt
[root@localhost gitroot]# git reset HEAD 1.txt
重置后撤出暂存区的变更:
M       1.txt
[root@localhost gitroot]# cat 1.txt
Linux
Python
Web
Go
MongoDB
Mysql
Nginx
Mariadb
Git
[root@localhost gitroot]# git checkout -- 1.txt
[root@localhost gitroot]# cat 1.txt
Linux
Python
Web
Go
MongoDB
Mysql
Nginx
Mariadb
[root@localhost gitroot]#

还有另外一种方法删除1.txt

6bb20553ef66f082e08f36d09447e622bfe.jpg

可以这样恢复

15fd4f8f78eb4146554d9012922a3e1bfc8.jpg

六、 建立远程仓库

现在网站https://github.com ,注册一个账号

进入之后添加一个库

c1ed67cb397f8f2b2fd62372b408da64a19.jpg

点击头像右边的小三角之后点击设置看到有个ssh的这时候点击进入之后配置密钥

f0d486c5151ed298e45b3c3e5c93554d9e8.jpg

在linux虚拟机上,也建立一个目录(仓库),名称和网页设置的仓库名保持一致 之后按照github上面库的操作步骤一步一步进行操作

d5c2f084c7328a918e332176cdd3d91a844.jpg

6104ca8a5b496fb5eabe0dc63adf6a1d583.jpg

在虚拟机上创建一个文件远程推送到GitHub上面

23a3e4fe72d9d08f3e1b8c752fd3400572b.jpg

c9c0cb39ea8b9bc5aa46407c2139b35de7c.jpg

七、克隆远程仓库

在GitHub上面点击克隆就会出现克隆连接地址

1f41ae8f97f7c2ab58639b619c4a61a7f0c.jpg

df995a6173374def6a099593493d3be2743.jpg

此时克隆算是完成了

八、分支管理

  • 查看分支:git branch
  • 创建分支:git branch 分支名
  • 切换分支:git checkout 分支名
  • 分支是相互独立的
  • 合并分支:git merge 用户名

e88be23dde771e604ec0f75bc113a2832bf.jpg

合并分支要两个文件内容都一样才可以进行合并否则就会出现报错

9f0b6c6e70ff33e5957667dac09cd9b2797.jpgf437ea53713bc93a708078c2f7bd9e25859.jpg

adb19f86e00bc28543caaff0da6a11c1ada.jpg

  • 删除分支:git branch -d 分支名
  • 强制删除分支:git branch -D 分支名

017e0c911b7e55f95b112944df6912730ce.jpg

九、远程分支

分支使用的原则

  • master分支是非常重要的,线上发布代码使用master分支。平时开发代码不要在这个分支上
  • 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master
  • 开发人员应该在dev的基础上再分支成个人分支,在个人分支里面开发代码,然后合并到dev分支。

比如dev合并bob分支(dev,bob分支事先创建好

查看远程分支:git ls-remote origin

0115bd761c10e3c9b7e2a4f295e8108f983.jpg

取出远程分支dev:git checkout -b dev origin/dev

[root@localhost Linux]# git checkout -b dev origin/dev
分支 dev 设置为跟踪来自 origin 的远程分支 dev。
切换到一个新分支 'dev'
[root@localhost Linux]# git branch 
* dev
  master
[root@localhost Linux]# ls
aaa.txt  README.md

在Dev的分支下创建一个库并推送到远程仓库

44fa86afb6c24271ebda4d11f2a268b9001.jpg

十、 标签管理

定义

  • 标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。
  • 定义标签需要在master下; 定义标签:git tag v1.0
  • 查看指定标签信息:git show v1.0

036ba089466ca62a6a5650117b83e279fb3.jpg

查看历史的commit信息

9281aedbfa9ef4e5f97374aa91da4811639.jpg

针对历史commit打标签

efaa7e35fc81a8e57c55f260215738e3ea0.jpg

可以对标签进行描述

1caf215c664054cb3d4e4f54e228302129f.jpg

删除标签

b80b2436b803934ac3fc3f7d8820219d82d.jpg

  • 把指定的标签推送到github上的仓库里: git push origin v1.0
  • 把所有的标签推送到远程仓库:git push --tag origin
  • 在本地删除一个标签,远程也删除标签:git push origin :refs/tags/v2.0

十一、 git别名

git下命令比如checkout过长,不易拼写,用别名可以提高我们的工作效率

git定义别名的语句:git config --global alias.br branch

e35bc20b904d96e5edcb998590fb771b1c7.jpg

其实这些命令都会在git配置文件中生成,当然也可以直接在配置文件中填写

vim /root/.gitconfig

509b3b088280cab5aab8dcde39b29862a5f.jpg

小技巧:可以针对 log的别名设置

[root@localhost Linux]# git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cr

查看git别名清单

a332d1d0b18631abb0ec8cf9cba36fe0ea0.jpg

取消别名 git config --global --unset alias.br

cbd6d2f99f7eb379ce85fee6e95d4ae5c11.jpg

十二、搭建git服务器

搭建git服务器的应用场景

github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的,开发人员很少。此时可以使用命令行的git服务器

首先需要两台虚拟机,在另一台虚拟机上进行安装git

531e0b8c1c583dd67f0a3f18d283977e89d.jpg 

在新机器上添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆

[root@localhost ~]# useradd -s /usr/bin/git-shell git 
[root@localhost ~]# tail -1 /etc/passwd
git:x:1001:1001::/home/git:/usr/bin/git-shell
[root@localhost ~]# cd /home/git/

创建 .ssh/authorized_keys 文件,用来放客户机端的公钥

[root@localhost git]# mkdir .ssh
[root@localhost git]# touch .ssh/authorized_keys
[root@localhost git]# chmod 600 .ssh/authorized_keys
[root@localhost git]# chown -R git:git .ssh

在客户端上复制ssh的公钥

[root@localhost Linux]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIqSbPcnUg1613IiYZSVtKnDq34hGah/ZPUhFW4/8rKPTrbepoUWgPbmvCVhfNcon2zbnCpdc/J30ic/bGRhBbnNGToPDJcotZUmpmXJYe2C5mXIyrZa03vq8bp7wCsC1EX5VdGJ3qu3BlyCILpgZYl4lE9inyZz50EN8PzF0IohANJpJLc8Ep9pH+FfWYwa3w1b2wwkkifhDceYyL/hWyTACVuDxHARHblr5e/hv3QYBOIKlr2uB2f7787KChqiyvNneQnan2RI74/SLUAsGiw+yxXt3n3EVIMPNLs7bZWk/ceL3M9l7C9meFO1arrplHiIl5fAHzbt5/tQdVpfOJ root@localhost.localdomain

把客户端上的公钥粘贴到服务端上面

15e124dc1fa8b1bea2ef5bc76648de497d5.jpg

在客户端上进行连接服务端

878280a8cb7d709d2378c41df82c8586e3d.jpg

在服务端上,创建gitroot目录作为git仓库

[root@localhost git]# mkdir /data/gitroot
[root@localhost git]# cd /data/gitroot
[root@localhost gitroot]# git init --bare sample.git
初始化空的 Git 版本库于 /data/gitroot/sample.git/
[root@localhost gitroot]# chown -R git:git sample.git

git init --bare sample.git

会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾

服务端已经搭建好,下面进行测试

65edf1dd22f3a35d9ad37e6f0ee8516a6f7.jpg

在root/sample本地工作区进行测试

[root@localhost Linux]# cd sample/
[root@localhost sample]# cp /etc/init.d/mysqld  .
[root@localhost sample]# git add .
[root@localhost sample]# git commit -m "add new file"
[master(根提交) caf7421] add new file
 1 file changed, 378 insertions(+)
 create mode 100755 mysqld
[root@localhost sample]# git push origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 3.85 KiB | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.126.129:/data/gitroot/sample.git
 * [new branch]      master -> master

在此工作区root/sample下,新建文件,并推送到远程仓库

[root@localhost sample]# echo "wwwwwwww" > 111.txt
[root@localhost sample]# git add 111.txt
[root@localhost sample]# git commit -m "add 111.txt"
[master c5eb020] add 111.txt
 1 file changed, 1 insertion(+)
 create mode 100644 111.txt
[root@localhost sample]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 269 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.126.129:/data/gitroot/sample.git
   caf7421..c5eb020  master -> master

在/tmp/目录创建一个工作区(与/root/sample区分),模拟其他用户

[root@localhost sample]# cd /tmp/
[root@localhost tmp]# git clone git@192.168.126.129:/data/gitroot/sample.git
正克隆到 'sample'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), 4.08 KiB | 0 bytes/s, done.

在此工作区/tmp/sample下,更改111.txt内容,到另一工作区去查看

[root@localhost tmp]# cd sample/
[root@localhost sample]# echo "12345678" >> 111.txt
[root@localhost sample]# git add 111.txt
[root@localhost sample]# git commit -m "ch 111.txt"
[master e6cee27] ch 111.txt
 1 file changed, 1 insertion(+)
[root@localhost sample]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.126.129:/data/gitroot/sample.git
   c5eb020..e6cee27  master -> master

把远程拉过来查看变化

f01a5fe9625413f809a1818cc0f65056b07.jpg

十三、gitlab

13.1 安装gitlab

gitlab分社区版(ce)和企业版(ee),官方推荐安装gitlab至少4G内存。

安装方法:https://about.gitlab.com/installation/#centos-7?version=ce

 

转载于:https://my.oschina.net/u/4000361/blog/3016570

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值