Git和Gitlab

mac2025-09-15  10

文章目录

Git简介Git的使用下载安装常用选项Git使用提交与回滚撤销工作目录内的改动撤销暂存区域的内容 Git的分支管理创建与切换分支分支管理合并分支 Gitlab介绍安装启动Gitlab在Gitlab上创建项目使用GitlabGitlab免密推送

Git简介

Git和SVN是目前市面上唯二的版本控制工具,相比SVN来说,Git的某些功能更加强大一些。具体来说,它们主要有这些区别:

Git是分布式结构;SVN是集中式结构Git的每个历史版本都会被完整地保存下来,随时可以回滚;SVN存储的是差异文件,无法恢复历史版本

Git分为三个区域,Git的所有功能都基于这三个区域实现

工作目录:对项目的某个版本独立提取出来的内容暂存区域:保存了下次将提交的文件列表信息仓库目录:保存项目的元数据和对象数据库的地方

它们的关系是这样的 我们在工作目录中修改了代码后,将代码添加到暂存区域,然后将代码从暂存区域提交到仓库,本次上传就算完成了,之后其他人可以从仓库目录下将代码克隆到自己的工作目录。

Git的使用

下载安装

yum -y install git

Git是一个命令行工具,而不是服务,因此我们不需要启动服务

常用选项

通过

git --help

查看Git用法

add添加文件到暂存区域branch显示分支和创建分支checkout切换分支以及回滚clone克隆gitlab仓库commit提交代码至仓库init初始化工作目录log显示历史版本信息merge合并分支pull拉取远程代码至本地push推送本地仓库代码至远程仓库reset回滚版本status查看工作目录下的文本状态

Git使用

提交与回滚

首先创建一个Git目录(任何目录都可以作为Git工作目录) mkdir /git 我们查看一下这个目录里的内容 ls -a /git . .. 理所应当什么都没有 进入/git目录后进行初始化 git init 初始化空的 Git 版本库于 /git/.git/ 再次查看这个目录 ls -a /git . .. .git 我们发现多了一个名为git的隐藏目录 创建一个文件并添加到暂存区域 cat > v1.sh <<EOF > #!/bin/bash > echo 'hello world' > EOF git add . 提交至仓库 git commit -m 'v1' [master(根提交) 7bc0db6] v1 Committer: root <root@localhost.localdomain> 您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确 与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息: git config --global user.name "Your Name" git config --global user.email you@example.com 设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份: git commit --amend --reset-author 1 file changed, 2 insertions(+) create mode 100644 v1.sh 初次提交时,屏幕会输出一些提示信息,我们跟着提示走 git config --global user.name "Your Name" git config --global user.email you@example.com 再次提交 git commit -m 'v1' # 位于分支 master 无文件要提交,干净的工作区 提交成功后我们来查看历史版本信息 git log commit 7bc0db6f9f5785332e144e387d066bed69a41f99 Author: root <root@localhost.localdomain> Date: Fri Nov 1 18:27:43 2019 +0800 v1 再次编辑文件并添加至暂存区域,提交到仓库 echo "echo 'hello world'" >> v1.sh git add . git commit -m 'v2' [master d9f115e] v2 1 file changed, 1 insertion(+) 查看历史版本 git log commit d9f115e3d7d56efd08cd14ace5de021897a8097b Author: Your Name <you@example.com> Date: Fri Nov 1 18:34:47 2019 +0800 v2 commit 7bc0db6f9f5785332e144e387d066bed69a41f99 Author: root <root@localhost.localdomain> Date: Fri Nov 1 18:27:43 2019 +0800 v1 我们发现刚才提交的v2版本已经出现 回滚至v1版本 git reset --hard 7bc0db6f9f5785332e144e387d066bed69a41f99 查看历史版本 git log commit 7bc0db6f9f5785332e144e387d066bed69a41f99 Author: root <root@localhost.localdomain> Date: Fri Nov 1 18:27:43 2019 +0800 v1 现在的最新版又变成了v1 并且工作目录下的文件也变回了v1版 cat v1.sh #!/bin/bash echo 'hello world' 那如果我们又想回到v2版了呢 查看历史记录获得v2的ID号 git reflog 7bc0db6 HEAD@{0}: reset: moving to 7bc0db6f9f5785332e144e387d066bed69a41f99 d9f115e HEAD@{1}: commit: v2 7bc0db6 HEAD@{2}: commit (initial): v1 回滚至v2版 git reset --hard d9f115e HEAD 现在位于 d9f115e v2 查看历史版本 git log commit d9f115e3d7d56efd08cd14ace5de021897a8097b Author: Your Name <you@example.com> Date: Fri Nov 1 18:34:47 2019 +0800 v2 commit 7bc0db6f9f5785332e144e387d066bed69a41f99 Author: root <root@localhost.localdomain> Date: Fri Nov 1 18:27:43 2019 +0800 v1

Git的回滚功能简直了

当然以上只是git强大功能的冰山一角

撤销工作目录内的改动

修改一下文件并查看文本状态 cat >> v1.sh <<EOF echo 'hello world' EOF git status # 位于分支 master # 尚未暂存以备提交的变更: # (使用 "git add <file>..." 更新要提交的内容) # (使用 "git checkout -- <file>..." 丢弃工作区的改动) # # 修改: v1.sh # 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") 这个文本状态其实是一个对我们接下来能够做的操作的提示 在这里我们既可以添加文件到暂存区域,也可以丢弃工作区的改动 丢弃工作区的改动 git checkout -- v1.sh 再看文件已经恢复到了修改前的状态

撤销暂存区域的内容

再次编辑文件并添加至暂存区域 cat >> v1.sh <<EOF > echo 'hello world' > EOF git add . 查看文本状态 git status # 位于分支 master # 要提交的变更: # (使用 "git reset HEAD <file>..." 撤出暂存区) # # 修改: v1.sh 提示我们可以撤回这次提交 撤销暂存区域的文件至工作目录 git reset HEAD v1.sh 重置后撤出暂存区的变更: M v1.sh 查看工作目录中的文件,发现之前的修改还在

现在我们可以很清晰的理解Git的这三个区域了,它们就好像三阶台阶,我们一次只能跨一步。

Git的分支管理

创建与切换分支

查看分支(只在提交过文件才会有分支的概念) git branch * master 默认只有一个主分支,*表示当前在哪个分支里 创建分支 git branch a1 切换分支 git checkout a1 M v1.sh 切换到分支 'a1' git branch * a1 master

分支管理

每一种版本控制工具都会用到分支的概念,因为任何一个规模稍微大一点的代码开发项目就会涉及到很多程序员、很多功能模块,如果所有人都把自己写的代码堆在一起,这样的代码管理难度不可想象

分支就像这样 红色的箭头就是一个项目的主线,每一个功能模块都是一个分支,程序员在自己的分支将自己负责的功能实现,在提交之前从别的分支和主线都看不到这条分支里的动作;只有当提交之后,主线才会得到分支里的内容。

下面我们来证明一下这个效果

进入a1分支并提交一个版本 git add . git status # 位于分支 a1 # 要提交的变更: # (使用 "git reset HEAD <file>..." 撤出暂存区) # # 修改: v1.sh # git commit -m 'v3' [a1 7e13e73] v3 1 file changed, 1 insertion(+) git log commit 7e13e73d727f372ab4966095024f26c5b5c9bfa5 Author: Your Name <you@example.com> Date: Fri Nov 1 19:32:00 2019 +0800 v3 commit d9f115e3d7d56efd08cd14ace5de021897a8097b Author: Your Name <you@example.com> Date: Fri Nov 1 18:34:47 2019 +0800 v2 commit 7bc0db6f9f5785332e144e387d066bed69a41f99 Author: root <root@localhost.localdomain> Date: Fri Nov 1 18:27:43 2019 +0800 v1 从a1分支里可以看见历史版本出现了刚提交的v3 回到主分支,查看历史版本 git checkout master 切换到分支 'master' git log commit d9f115e3d7d56efd08cd14ace5de021897a8097b Author: Your Name <you@example.com> Date: Fri Nov 1 18:34:47 2019 +0800 v2 commit 7bc0db6f9f5785332e144e387d066bed69a41f99 Author: root <root@localhost.localdomain> Date: Fri Nov 1 18:27:43 2019 +0800 v1 从主分支看不到在a1里提交的v3版本

合并分支

将a1分支合并到master分支 git merge a1 更新 d9f115e..7e13e73 Fast-forward v1.sh | 1 + 1 file changed, 1 insertion(+) 合并分支的命令只写要合并的分支,默认将分支合并到当前所在的分支里 查看历史版本 git log commit 7e13e73d727f372ab4966095024f26c5b5c9bfa5 Author: Your Name <you@example.com> Date: Fri Nov 1 19:32:00 2019 +0800 v3 commit d9f115e3d7d56efd08cd14ace5de021897a8097b Author: Your Name <you@example.com> Date: Fri Nov 1 18:34:47 2019 +0800 v2 commit 7bc0db6f9f5785332e144e387d066bed69a41f99 Author: root <root@localhost.localdomain> Date: Fri Nov 1 18:27:43 2019 +0800 v1 刚才在a1里提交的v3版本已经合并到了主分支里

Gitlab介绍

Gitlab是私有仓库。我们都知道GitHub,其实GitHub就是一个面向全世界的Gitlab。

安装启动Gitlab

想要使用Gitlab,首先我们要打开Gitlab的中文网站: https://www.gitlab.cc/ 然而因为某些原因,我访问不了这个网站,于是我只能去清华大学开源镜像站下载了一个软件包 清华大学开源镜像站网址: https://mirrors.tuna.tsinghua.edu.cn/ 也可以直接下载一个rpm包,因为Gitlab没有任何依赖,我就不配yum源直接rpm安装了(为了安全起见,最好不要这么做)

下载安装Gitlab wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.2.9-ce.0.el7.x86_64.rpm rpm -ivh gitlab-ce-12.2.9-ce.0.el7.x86_64.rpm 修改配置文件 vim /etc/gitlab/gitlab.rb external_url 'http://192.168.88.105' 这个配置文件只有这一行没加注释,很好找,如果不想改成IP就要在主机上配置域名解析 重新加载配置文件 gitlab-ctl reconfigure 这一步可能会等很长时间

接下来我们就能通过浏览器访问了。Gitlab默认占用80端口,端口有冲突的注意下。

在Gitlab上创建项目

第一次登录Gitlab后我们会看到这个界面

首先我们需要创建一个项目

大致流程是:

创建用户创建项目组创建项目

经过一顿操作后我们成功创建了新项目,这时我们会看见这个界面 我们仔细看,其实这里已经给出了我们所有能对这个项目做的操作

使用Gitlab

我们按照界面的指示一步一步做

Git全局设置 git config --global user.name "Administrator" git config --global user.email "admin@example.com" 创建新的存储库 git clone http://192.168.88.105/root/freedom.git cd freedom touch README.md git add README.md git commit -m "add README" git push -u origin master 从浏览器上我们也能看见刚才推送的README.md文件

Gitlab免密推送

刚才在我们推送时交互式的输入了用户名和密码,做运维怎么能干这么lose的事呢,所以我们要配置免密登录

生成密钥 ssh-keygen -t rsa 复制公钥信息 cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL1z/IumDIwXlwQ3JLdLdosdpDvTJv2VofTKO2EZReCin57O+OiD4E6V7hrE6NCZ9p2nTR1mOoh0UjqhZd8V2pvqSYXXzkuVlFEvEeqpwDITHsFWhv8MmLhP7d6QXF4/LdBNNeZVA9e0mvXwchHacu9KQSeOAFmjlfiLOPDOSVdvwt7SkkuFTstBXxQz/g/pq8eM5c4dfGdDEdiTqMCqrikbHX6PRRy9sP62zbuVY7mO77U5o9uppywY2rpQczru3uIpWDzj/pTdxWSQCgkPTE0sZI102j//73NmVE375sMSFK4WJaqq7dQ6EcagYF9DAz21NQ2aVfIAhEy8THMC41 root@localhost.localdomain 把公钥添加到Gitlab中

再次推送点什么东西,这次我们没有输用户名和密码

最新回复(0)