代码管理平台
一、代码管理平台介绍
版本控制,记录若干文件内容变化,以便将来查阅特定版本修订情况
版本管理工具发展史: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
查看其目录下的配置文件目录;authz :控制权限; passwd :密码文件 ;svnserve.conf :仓库的配置文件
在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 :要服务的目录的根目录
在启动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
查看变更日志:svn log
[root@localhost myproject]# svn log
四、客户端上使用svn(windows)
打开官网下载最新版TortoiseSVN:https://tortoisesvn.net/index.zh.html
下载中文简体的语言包
软件安装后,在桌面创建一个myproject的文件夹,并右键,选择SVN检出
填写服务端的库,然后确定
输入用户名密码之后就能看到下面的图示说明配置正确
配置完毕后,现在开始做测试;在桌面myproject的文件夹创建test.txt
点击右键,选择TortoiseSVN > 加入
此时文件上出现蓝色加号(+),在点击右键,选择SVN提交
此时添加已经完成,点击确定
此时客户端已经加载完成,现在服务端,进行查看
五、单机上使用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类似
上面再增加的时候出现了报错,按照报错的格式进行操作
此时在提交git.txt文件
git status:查看当前仓库中的状态,比如是否有改动的文件
git diff :可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
git log :查看所有提交记录;格式比较繁琐,有之前定义的邮箱和用户名
git log :查看所有提交记录;格式比较繁琐,有之前定义的邮箱和用户名
查看日志的时候,可以定义一行:git log --pretty=oneline
回退版本,其中后面跟的字符串是简写: git reset --hard ID
git reflog :查看所有历史版本
git checkout -- 1.txt :恢复1.txt
再写入一行内容,增加到仓库,有撤销增加 :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
可以这样恢复
六、 建立远程仓库
现在网站https://github.com ,注册一个账号
进入之后添加一个库
点击头像右边的小三角之后点击设置看到有个ssh的这时候点击进入之后配置密钥
在linux虚拟机上,也建立一个目录(仓库),名称和网页设置的仓库名保持一致 之后按照github上面库的操作步骤一步一步进行操作
在虚拟机上创建一个文件远程推送到GitHub上面
七、克隆远程仓库
在GitHub上面点击克隆就会出现克隆连接地址
此时克隆算是完成了
八、分支管理
- 查看分支:git branch
- 创建分支:git branch 分支名
- 切换分支:git checkout 分支名
- 分支是相互独立的
- 合并分支:git merge 用户名
合并分支要两个文件内容都一样才可以进行合并否则就会出现报错
- 删除分支:git branch -d 分支名
- 强制删除分支:git branch -D 分支名
九、远程分支
分支使用的原则
- master分支是非常重要的,线上发布代码使用master分支。平时开发代码不要在这个分支上
- 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master
- 开发人员应该在dev的基础上再分支成个人分支,在个人分支里面开发代码,然后合并到dev分支。
比如dev合并bob分支(dev,bob分支事先创建好
查看远程分支:git ls-remote origin
取出远程分支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的分支下创建一个库并推送到远程仓库
十、 标签管理
定义:
- 标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。
- 定义标签需要在master下; 定义标签:git tag v1.0
- 查看指定标签信息:git show v1.0
查看历史的commit信息
针对历史commit打标签
可以对标签进行描述
删除标签
- 把指定的标签推送到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
其实这些命令都会在git配置文件中生成,当然也可以直接在配置文件中填写
vim /root/.gitconfig
小技巧:可以针对 log的别名设置
[root@localhost Linux]# git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cr
查看git别名清单
取消别名 git config --global --unset alias.br
十二、搭建git服务器
搭建git服务器的应用场景:
github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的,开发人员很少。此时可以使用命令行的git服务器
首先需要两台虚拟机,在另一台虚拟机上进行安装git
在新机器上添加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
把客户端上的公钥粘贴到服务端上面
在客户端上进行连接服务端
在服务端上,创建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结尾
服务端已经搭建好,下面进行测试
在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
把远程拉过来查看变化
十三、gitlab
13.1 安装gitlab
gitlab分社区版(ce)和企业版(ee),官方推荐安装gitlab至少4G内存。
安装方法:https://about.gitlab.com/installation/#centos-7?version=ce