一、什么是git
-
git(分布式版本控制系统)
一个开源的分布式版本控制系统,可以有效的高速处理从小的到非常大的项目版本管理,也是Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。常见的git工具有github、gitlab、gitee等。 -
git的特点:
速度快、设计简单、对非线性开发模式的强力支持(允许成千上万个并行开发的分支)、完全分布式、有能力高效管理类似linux内核的超大规模项目
二、本地git仓库
git相关命令含义
-s表示简洁输出
-m 添加注释
??表示不存在版本库中
A表示已经添加到暂存区
M(左边)表示被文件被添加到暂存区
M(右边)表示在工作区发生修改
D表示从工作区删除
[root@server6 ~]# yum install git -y
[root@server6 ~]# mkdir /home/westos/demo
[root@server6 ~]# cd /home/westos/demo
[root@server6 demo]# ls
[root@server6 demo]# l.
. ..
安装git
创建并切换到demo目录,查看目录下无内容(包含隐藏文件)git init初始化demo目录为代码库,再次查看隐藏文件,出现.git隐藏目录,.git目录用于跟踪管理版本库。
在demo目录中创建README.md文件并查看状态,git add将代码添加到暂存区,再次查看文件状态。
默认在提交时会提交整个暂存区,添加注释并提交整个暂存区,提交时会默认创建邮箱和地址,也可以自行添加
再次查看可以看到代码文件前五状态内容,无内容表示文件无变更
向文件中添加内容,查看状态,右边的M表示目前代码的修改在工作区,git add后代码被提交到了暂存区,查看状态显示为左边的M,git commit提交代码
在文件中添加内容,查看状态为右边的M,也就是在工作区进行了修改,若不想进行修改可以通过git checkout撤销,查看文件可以看到追加部分消失,回到上一次提交的代码内容。
给文件追加内容先git add提交到暂存区,再次追加问价内容,查看状态MM,再次git add添加文件到暂存区,此时状态为左边的M
如果不想提交这些修改,可以使用git reset撤销暂存区的修改,查看状态可以看到右边的M即修改已经返回工作区,用git checkout撤销在工作区的修改,此时查看文件内容只有一行
为方便以后进行操作,可以生命用户信息,用户名为qwe,email为qwe@westos.org,这一信息被保存在/.gitconfig这一隐藏文件里
在demo目录下创建文件名为a的隐藏文件和名为dir的隐藏目录
编辑.gitinnore文件,写入.*表示或略当前目录中 的所有隐藏文件,此时查看状态就看到不到刚才的隐藏文件了
查看demo目录下的代码文件内容,再追加一行并提交更改,-a参数相当于之前的add操作,不用分两次执行了。
查看状态无内容,这表示更改已经提交且无变更,此时通过rm -rf删除代码文件,查看状态可以看到右侧的D,表示删除的是工作区的内容,可以撤销防止误删
使用checkout来撤销此次删除,然后查看文件内容,可以看到文件恢复
如果使用git rm进行删除后,再使用commit提交了删除操作,可以使用回滚的方式恢复文件信息,使用git reflog命令查看历史版本信息,然后选择需要回滚到的版本,使用 git reset --hard 版本id进行回滚。
二、远程git仓库搭建
这里使用gitee进行仓库的搭建,浏览器搜索gitee官网、账号注册部分省去。
创建并查看秘钥,赋值公有秘钥到gitee仓库中的SSH公钥
点击右上角的加号并选择新建仓库
设置仓库名为demo,路径为自动添加
在仓库组件的是否开源选择开源选项并勾选底下的仓库公开选项并保存
在仓库中可以查看到ssh地址,根据页面提示可以将本地的demo仓库上传到gitee仓库
切换到demo目录,推送本地仓库内容到gitee
在gitee远程仓库中的demo仓库中可以查看到仓库中的文件
在本地将demo代码文件删除,通过gitee远程仓库克隆,可以看到demo恢复
三、搭建远程私有仓库gitlab
gitlab-ce下载地址:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
#安装相关依赖
[root@server1 ~]# yum install curl policycoreutils-python openssh-server perl -y
[root@server1 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.1.2-ce.0.el7.x86_64.rpm --no-check-certificate
[root@server1 ~]# ls
anaconda-ks.cfg gitlab-ce-14.1.2-ce.0.el7.x86_64.rpm original-ks.cfg
[root@server1 ~]# rpm -ivh gitlab-ce-14.1.2-ce.0.el7.x86_64.rpm
[root@server1 ~]# cd /etc/gitlab/
[root@server1 gitlab]# ls
gitlab.rb
#编辑gitlab.rb配置文件,将外部url即external_url参数改为自己的gitlab仓库ip
[root@server1 gitlab]# vim gitlab.rb
------------------------------
32 external_url 'http://192.168.230.140'
-------------------------------
#重载服务
[root@server1 gitlab]# gitlab-ctl reconfigure
#重载时间较长耐心等待
#重载完成后可在提示中看到密码储存在/etc/gitlab/initial_root_password
#查看initial_root_password文件得到密码
[root@server1 gitlab]# cat /etc/gitlab/initial_root_password
-----------------------------------------
Password: v26/LpBMqlJlWqhCq5v7g1phFzq4Py8IzMvd2w8ShIE=
-----------------------------------------
#浏览器中访问server1ip等到登陆框
用户名是root,密码是刚得到的密码,点击登陆
点击右上角的用户,选择preferense,password修改密码,保存(密码长度必须大于8位)重新登陆
为方便我们使用可以修改语言支持为中文:
在preferense中的location language选择中文保存重新登陆
#生成密钥
[root@server1 ~]# ssh-keygen
[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# ls
id_rsa id_rsa.pub
[root@server1 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY1PvEO9bwEnqBiWkeq2cvw6wOru2J3mXbOd6QHhoVoNaf/z3MrY/7ZUhBPLXFCxVa8OGxsYlTfdYkhGq3foNxnXHMOlHsM7GXdOCcpB5UinmaOAAlydVoSaJ8OGZAbzs5bTKul/uGNhUaeEUC/0PR3eQENPmn2acaW1oPLtKqt3sOCyWsGPSSlxXQfS4KHTbWI/ag92YRdUqrGG/V+FQNsPtsVy+Og8YTVvz80YydRz13Dcl2iKwOKYyvnRtEvPnXEIYGAlC4mk3sY6USROSgRObiJ1sg8GmLHTASBVjLKawRlLRQP6HmkQ8yLwIrw8TtjFC9UnipUotVnlvobmfr root@server1
将公钥复制到gitlab仓库的ssh keys,点击addkey
添加成功
新建名为demo的项目
通过ssh克隆该项目仓库
[root@server1 ~]# yum install git -y
#执行克隆命令,克隆demo仓库到本地
[root@server1 ~]# git clone git@192.168.230.140:root/demo.git
Cloning into 'demo'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
[root@server1 ~]# ls
anaconda-ks.cfg demo gitlab-ce-14.1.2-ce.0.el7.x86_64.rpm original-ks.cfg
[root@server1 ~]# cd demo/
#本地的demo仓库中的内容与gitlab中的一致
[root@server1 demo]# ls
README.md
[root@server1 demo]# git remote -v
origin git@192.168.230.140:root/demo.git (fetch)
origin git@192.168.230.140:root/demo.git (push)
在gitlab仓库中可以看到,在jenkins中也能查看到