程序员必会的git语法及gitlabgithub应用
Posted 宝山的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员必会的git语法及gitlabgithub应用相关的知识,希望对你有一定的参考价值。
文章目录
3分钟掌握git语法及gitlab、github应用
关于作者
-
作者介绍
🍊 博客主页:作者主页:rivers.blog.csdn.net
🍊 简介:云计算领域优质创作者🏆、CSDN 博客专家、在校期间参与众多计算机相关的省赛、国赛,斩获系列荣誉。考取华为资深工程师、红帽工程师等系列认证。🍊 关注我:简历模板、学习资料、文档下载、技术支持 都可以私信我哦!
让生命像一团热烈燃烧的火,直到死亡才能使它熄灭
前言
-
博文介绍
亲爱的粉丝们,在这里,首先祝大家新年快乐。新的梦想,新的希望,带着微笑,拥抱阳光,往事不回头,未来不将就,希望2022百毒不侵,活的认真,笑的放肆。
2022年我们注定不凡,愿你我 踔厉奋发,笃行不怠,致广大而尽精微,加油!
从今天开始,我将继续更新博文,争取2022年分享一套Centos7.x系列的linux云计算技术。将我所学、所闻、所知的都分享出来,如果你觉得本文有用,欢迎点赞、关注。
一、控制版本
1.1 什么是版本
- 最初指一种书籍经过多次传抄、刻印或以其他方式而形成的各种不同本子
- 在我们计算机领域,版本则是指 一个文件或代码经过修改后,每一次修改都可以称之为一个版本
1.2 什么是控制版本
- 版本控制软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件。
- 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
1.3 版本管理工具
-
集中式管理(cvs、svn)
集中式版本控制系统,版本库是集中存放在中央服务器的 而干活的时候,用的都是自己的电脑 所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器 中央服务器就好比是一个图书馆 你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆 集中式版本控制系统最大的毛病就是必须联网才能工作 所有的版本都在一个服务器上面 如果服务挂了, 所有记录的版本都没了
-
分布式管理(git)
分布式版本控制系统,则不需要中央服务器 每个协同开发者都拥有一个完整的版本库 这么一来,任何协同开发者用的服务器发生故障,事后都可以用其它协同开发者本地仓库恢复
二、git 版本管理
2.1 git 介绍
- git是一款开源的分布式版本管理工具,作者Linux之父-Linus
- git官网
2.2 git 安装
-
下载地址:https://git-scm.com/download/
-
linux系统上,直接yum 安装
# YUM 安装git [root@jenkins_server ~]#yum -y install git [root@jenkins_server ~]# git --version git version 1.8.3.1 [root@jenkins_server ~]# #查看参数帮助 [root@vm1 ~]# git --help git的操作可以说只需要git一条命令加参数即可
2.3 git工作转态
-
Git 管理项目时,文件流转分为三个工作区域(工作目录、工作目录、以及本地仓库)
Git 的工作目录:从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录,实际上都是从 Git 目录中的压缩对象数据库中提取出来的 暂存区域:是个简单的文件 .git目录之下,名为index,它一般很小,一般不超过1KB左右 一般都放在 Git 目录中,有时候人们会把这个文件叫做索引文件 以及本地仓库:当我们在某个目录下运行git init命令后,在该目录下便会生成一个.git的子目录,这个目录是隐藏的。它是 Git 用来保存元数据和对象数据库的地方,这个目录可以说是Git的核心
-
对于任何一个文件,在 Git 内都只有三种状态
1.已修改(modified) 已修改表示修改了某个文件,但还没有提交保存 2.已暂存(staged) 已暂存表示把已修改的文件放在下次提交时要保存的清单中 3.已提交(committed) 已提交表示该文件已经被安全地保存在本地数据库中了
2.4 git 工作流
-
工作区
-
工作流
工作目录(working directory): 也可叫工作区. 是存放项目代码文件的一个目录。 仓库(repository) : 也可叫版本库. 在git init命令初始化工作目录后会产生一个隐藏的子目录.git, 可以将其理解为git的仓库或版本库。 仓库分为本地仓库与远程仓库 做好的改变,需要先放在暂存区,确认无误后,再一次git commit 保存
2.5 git基本操作
1.Ggit 身份标识
-
git 身份标识
-
这里设置 github上的账号、邮箱,保持一致
git config --global user.name "自已的名字" git config --global user.email "自已的邮箱地址" [root@jenkins_server ~]# git config --global user.name "hbs" [root@jenkins_server ~]# git config --global user.email "rivers_hbs@163.com" #查看配置的信息 git config --list [root@jenkins_server ~]# git config --list user.name=hbs user.email=rivers_hbs@163.com # 为啥需要设置标识呢 因为git是分布式版本控制系统,不同的人提交代码需要区分,所以每个人都要设置一个身份标识。如果不设置的话谁会知道你这个开发者是A,B,还是C? 查看当前配置的远程仓库 git remote -v 删除本地指定的远程地址 git remote remove origin
2.git 初始化工作目录
- 初始化工作目录
git init
# 1.首先这里采用的是linux,不是windows ,所有我们先创建一个工作目录 git-work [root@jenkins_server ~]# mkdir git-work [root@jenkins_server ~]# ls anaconda-ks.cfg git-work # 2.进入自己创建的工作目录,并查看 oot@jenkins_server ~]# cd git-work/ [root@jenkins_server git-work]# ls [root@jenkins_server git-work]# ls -a . .. # 初始化 工作目录 [root@jenkins_server git-work]# git init Initialized empty Git repository in /root/git-work/.git/ [root@jenkins_server git-work]# ls -a . .. .git 在git init命令初始化工作目录后会产生一个隐藏的子目录.git, 可以将其理解为git的仓库或版本库。 # 查看 工作状态 [root@jenkins_server git-work]# git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track) 现在是 nothing to commit ,没有可以提交的,所以作为开发者,我们临时准备了一个vx.py文件。再次看出状态 [root@jenkins_server git-work]# vim wx.py [root@jenkins_server git-work]# cat vx.py hello world [root@jenkins_server git-work]# [root@jenkins_server git-work]# git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # vx.py nothing added to commit but untracked files present (use "git add" to track) 再次查看状态时,发现有一个 vx.py 文件,需要使用git add 加入暂存区,现在还没有提交到仓库。相当于还没提交
3.git 提交版本
- 提交版本 git add
[root@jenkins_server git-work]# git add vx.py [root@jenkins_server git-work]# git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: vx.py # [root@jenkins_server git-work]# git add 后,才真正的加入到暂存区,但是还没有保存。 使用git add命令提交到暂存区(逆向操作为git rm --cached vx.py) [root@jenkins_server git-work]# git commit -m "v1_vx.py." [master (root-commit) b84d34a] v1_vx.py. 1 file changed, 1 insertion(+) create mode 100644 vx.py [root@jenkins_server git-work]# git status # On branch master nothing to commit, working directory clean [root@jenkins_server git-work]# git commit 才算提交保存了。将已经同步的暂存区的状态保存为一个版本,此时三大区状态一致 git commit -m "注释说明",建议给个说明 提交第一个文件后,版本库.git子目录里就多了一个index [root@jenkins_server git-work]# ls .git/ branches description index objects COMMIT_EDITMSG HEAD info refs config hooks logs 使用 strings命令查看可以看到git add的文件列表 [root@jenkins_server git-work]# strings .git/index DIRC vx.py [root@jenkins_server git-work]# 注意: 代码文件需要 commit 提交后才能纳入版本控制。 可以使用git status查看工作目录里有哪些文件需要提交
-
第一次 提交(第1个版本)
创建一个工作目录 [root@jenkins_server ~]# mkdir python [root@jenkins_server ~]# cd python/ [root@jenkins_server python]# ls -a . .. 初始化目录 [root@jenkins_server python]# git init Initialized empty Git repository in /root/python/.git/ [root@jenkins_server python]# ls [root@jenkins_server python]# ls -a . .. .git [root@jenkins_server python]# ls ./.git/ branches config description HEAD hooks info objects refs 模拟开发者修改代码 [root@jenkins_server python]# vim shell.sh [root@jenkins_server python]# [root@jenkins_server python]# cat shell.sh helloworld 1 [root@jenkins_server python]# 提交到 暂存区 [root@jenkins_server python]# git add shell.sh [root@jenkins_server python]# git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: shell.sh # [root@jenkins_server python]# 第一次提交 [root@jenkins_server python]# git commit -m "第一次提交" [master (root-commit) 4c63558] 第一次提交 1 file changed, 2 insertions(+) create mode 100644 shell.sh 查看文件状态 [root@jenkins_server python]# git status # On branch master nothing to commit, working directory clean [root@jenkins_server python]# [root@jenkins_server python]# echo "helloworld 2" >>shell.sh [root@jenkins_server python]# cat shell.sh helloworld 1 helloworld 2
-
第二次修改后,提交(第2个版本)
使用git status查看,信息告诉我们shell.sh被修改了 [root@jenkins_server python]# git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: shell.sh # no changes added to commit (use "git add" and/or "git commit -a") 查看修改了什么 [root@jenkins_server python]# git diff shell.sh diff --git a/shell.sh b/shell.sh index e4f340d..aea74ca 100644 --- a/shell.sh +++ b/shell.sh @@ -1,2 +1,2 @@ helloworld 1 - +helloworld 2 [root@jenkins_server python]# 加入到暂存区并查看状态 [root@jenkins_server python]# git add shell.sh [root@jenkins_server python]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: shell.sh # 第二次提交 [root@jenkins_server python]# git commit -m "第二次修改" [master ef67c67] 第二次修改 1 file changed, 1 insertion(+), 1 deletion(-) [root@jenkins_server python]# git status # On branch master nothing to commit, working directory clean [root@jenkins_server python]# 总结: 工作目录中写好的代码文件需要先git add 文件名添加到暂存区,再git commit 文件名提交。以后每次修改都要重复前两步。 git status查看工作目录中的状态 git diff 文件名查看文件修改了什么
4.查看历史版本
- 查看版本历史
[root@jenkins_server python]# git log commit ef67c67b55e79d0e819cf44a9b585a559acf02b5 Author: hbs <rivers_hbs@163.com> Date: Wed Feb 16 18:16:16 2022 +0800 第二次修改 commit 4c63558e595a21a8d5d94767662dfc8bddf04186 Author: hbs <rivers_hbs@163.com> Date: Tue Feb 15 22:48:08 2022 +0800 第一次提交 [root@jenkins_server python]# 使用git log --pretty=oneline查看提交的历史版本信息, 查看的显示信息更简洁。 前面字符串你可以看作就是一个**版本号**(commit id)。 [root@jenkins_server python]# git log --pretty=oneline ef67c67b55e79d0e819cf44a9b585a559acf02b5 第二次修改 4c63558e595a21a8d5d94767662dfc8bddf04186 第一次提交 [root@jenkins_server python]#
5. 版本回退与还原
- 版本回退与还原
1, 使用git reset --hard HEAD回退到上一个版本(也就是第1个版本) [root@jenkins_server python]# git reset --hard HEAD^ HEAD is now at 4c63558 第一次提交 [root@jenkins_server python]# cat shell.sh helloworld 1 [root@jenkins_server python]# 2.使用git reset --hard 第2个版本号 (还原到第2个版本) [root@jenkins_server python]# git reflog 4c63558 HEAD@0: reset: moving to HEAD^ ef67c67 HEAD@1: commit: 第二次修改 4c63558 HEAD@2: commit (initial): 第一次提交 [root@jenkins_server python]# git reset --hard ef67c67 HEAD is now at ef67c67 第二次修改 [root@jenkins_server python]# cat shell.sh helloworld 1 helloworld 2 [root@jenkins_server python]# 回退到**上上**一个版本, 也就是回退两个版本,使用git reset --hard HEAD^^ 回退三个版本,使用git reset --hard HEAD^^^, 以此类推。 如果回退100个版本,那用100个^符号不方便,可以换成git reset --hard HEAD~100 * 提交后的代码文件,使用git log查看当前版本及以前的历史版本。 * 使用git reset --hard HEAD^或者`git reset --hard HEAD~100`实现版本回退。 * 使用`git reflog`查看提交的所有操作及版本号 * 使用git reset --hard 版本号你可以自由的在不同版本之间来回切换。
6.撤销修改与删除恢复
-
撤销修改与删除恢复
只要文件git add到了暂存区, 无论有没有git commit提交。误删除后都可以使用 git checkout -- 文件名`来恢复。 如果文件没有`git add`到暂存区, 误删除了就没了。 [root@jenkins_server python]# touch 1.py [root@jenkins_server python]# ls 1.py shell.sh [root@jenkins_server python]# [root@jenkins_server python]# git add 1.py [root@jenkins_server python]# rm -f 1.py [root@jenkins_server python]# ls shell.sh [root@jenkins_server python]# git checkout -- 1.py [root@jenkins_server python]# ls 1.py shell.sh [root@jenkins_server python]#
7. 文件删除
- 文件删除
1, 没有git add到暂存区的文件**直接rm删除就ok 2.git add添加到暂存区,但没有git commit提交的文件。需要rm删除本地,还要git rm 文件名删除 [root@jenkins_server python]# touch 3.py [root@jenkins_server python]# git add 3.py [root@jenkins_server python]# rm -rf 3.py [root@jenkins_server python]# git rm 3.py rm '3.py' 3.git add添加到暂存区,并且已经git commit提交的文件。需要rm删除本地,再git rm 文件名删除,最后再提交删除 [root@jenkins_server python]# touch 2.py [root@jenkins_server python]# git add 2.py [root@jenkins_server python]# git commit -m "删除测试" [master 92387f8] 删除测试 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 1.py create mode 100644 2.py [root@jenkins_server python]# rm -f 2.py [root@jenkins_server python]# ls -a . .. 1.py .git shell.sh [root@jenkins_server python]# git rm 2.py rm '2.py' [root@jenkins_server python]# git commit -m "删除了2.py" [master cc48a02] 删除了2.py 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 2.py [root@jenkins_server python]#
8.分支管理
- 分支管理
1. 查看分支 [root@jenkins_server python]# git branch * master [root@jenkins_server python]# 2.创建分支 [root@jenkins_server python]# git branch rivers [root@jenkins_server python]# git branch * master rivers [root@jenkins_server python]# 3.切换分支 [root@jenkins_server python]# git checkout rivers Switched to branch 'rivers' [root@jenkins_server python]# git branch master * rivers [root@jenkins_server python]# 4.合并分支 (1).在rivers分支上新开发了一个代码文件,添加并提交 [root@jenkins_server python]# ls 1.py shell.sh [root@jenkins_server python]# echo "修改内容" > 1.py [root@jenkins_server python]# git add 1.py [root@jenkins_server python]# git commit -m "增加了新内容" [rivers d7e2923] 增加了新内容 1 file changed, 1 insertion(+) [root@jenkins_server python]# (2)切换到master上分支后,却发现根本没有这个文件 [root@jenkins_server python]# git checkout master Switched to branch 'master' [root@jenkins_server python]# cat 1.py [root@jenkins_server python]# [root@jenkins_server python]# git checkout rivers Switched to branch 'rivers' [root@jenkins_server python]# cat 1.py 修改内容 [root@jenkins_server python]# (3).合并分支,在查看能在master分支上查看到了 [root@jenkins_server python]# git checkout master Switched to branch 'master' [root@jenkins_server python]# git merge rivers Updating cc48a02..d7e2923 Fast-forward 1.py | 1 + 1 file changed, 1 insertion(+) [root@jenkins_server python]# cat 1.py 修改内容 [root@jenkins_server python]# 5.分支冲突 有些复杂的情况会造成冲突,这个时候git就不能帮我们自动的合并分支。我们就要手动处理冲突。 (1).在rivers 分支修改文件 [root@jenkins_server python]# git checkout rivers Switched to branch 'rivers' [root@jenkins_server python]# echo "冲突测试" >> 1.py [root@jenkins_server python]# cat 1.py 修改内容 冲突测试 [root@jenkins_server python]# (2).提交rivers分支上的修改 [root@jenkins_server python]# git add 1.py [root@jenkins_server python]# git commit -m "冲突测试" [rivers 1cf5e93] 冲突测试 1 file changed, 1 insertion(+) (3).切回master分支,也修改相同的文件 [root@jenkins_server python]# git checkout master Switched to branch 'master' [root@jenkins_server python]# echo "再一次修改" >>1.py [root@jenkins_server python]# cat 1.py 修改内容 再一次修改 [root@jenkins_server python]# (4).提交master分支上的修改 [root@jenkins_server python]# git add 1.py [root@jenkins_server python]# git commit -m "冲突测试" [master 1f648be] 冲突测试 1 file changed, 1 insertion(+) [root@jenkins_server python]# (5).合并rivers分支到master,就会出现冲突了 [root@jenkins_server python]# git merge rivers Auto-merging 1.py CONFLICT (content): Merge conflict in 1.py Automatic merge failed; fix conflicts and then commit the result. [root@jenkins_server python]# (6).手工解决冲突 git使用<<<<<<<<<,=========,>>>>>>>>符号分割冲突的内容,手动删除这些符号,并修改成你想要的内容 [root@jenkins_server python]# cat 1.py 修改内容 i xiang xiugaide 再一次修改 冲突测试 修改过de [root@jenkins_server python]# (7).解决冲突后添加并提交,最后再合并 [root@jenkins_server python]# git add 1.py [root@jenkins_server python]# git commit -m "冲突解决" [master 1068d39] 冲突解决 [root@jenkins_server python]# git merge rivers Already up-to-date. [root@jenkins_server python]# 6.删除分支 使用`git branch -d 分支名`来删除分支。 注意:不能删除当前使用的分支. [root@jenkins_server python]# git branch * master rivers [root@jenkins_server python]# git branch -d rivers Deleted branch rivers (was 1cf5e93). [root@jenkins_server python]# git branch * master [root@jenkins_server python]#
三、github和gitlab 介绍和使用
3.1 github 与gitlab区别
-
GitHub是目前最火的开源项目代码托管平台。它是基于web的Git仓库,提供公有仓库和私有仓库,但私有仓库是需要付费的。
-
github官网地址: https://www.github.com
-
GitLab可以创建免费的私有仓库。
-
GitLab是利用 Ruby开发的一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
3.2 使用github远程仓库
-
从centos服务器里上传一个项目
首先准备一个工作目录,并且初始化 [root@jenkins_server ~]# mkdir test1 [root@jenkins_server ~]# cd test1/ [root@jenkins_server test1]# git init Initialized empty Git repository in /root/test1/.git/ [root@jenkins_server test1]# ls -a . .. .git 准备一个上传文件 [root@jenkins_server test1]# echo "test" >>REEAME.md 加入暂存区 [root@jenkins_server test1]# git add REEAME.md 提交 [root@jenkins_server test1]# git commit -m "fist commit" [master (root-commit) b35a8b7] fist commit 1 file changed, 1 insertion(+) create mode 100644 REEAME.md 选择分支 [root@jenkins_server test1]# git branch -M master 建立远程连接 连接就是你的github仓库连接 [root@jenkins_server test1]# git remote add origin https://github.com/wyhe/test.git push 推送到仓库 [root@jenkins_server test1]# git push -u origin main
-
使用下面的命令可以实现https的密码缓存(下次不用再输密码了)
git config --global credential.helper store 免密push其实就是利用了ssh免密登录的原理: 1. 在本地产生空密码密钥对 2. 本地保留私钥,把公钥给对方 3. 实现本地到远程的免密 这里具体就做演示,可以百度即可
3.3 gitlab 部署及使用
1.gitlab 部署
- gitlab下载地址
[root@gitlab ~]# #wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.3-ce.0.el7.x86_64.rpm --no-check-certificate [root@gitlab ~]#yum -y install policycoreutils-python [root@gitlab ~]# rpm -ivh gitlab-ce-10.0.3-ce.0.el7.x86_64.rpm
2.git lab 配置
-
修改对外服务地址
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb 13 external_url 'http://10.0.0.71' 修改成gitlab服务器的IP地址,对外服务
-
初始化
[root@gitlab ~]# gitlab-ctl reconfigure 时间较久,需要3分钟左右时间,会自动帮助配置各个组件,并启动
-
查看状态
[root@gitlab ~]# gitlab-ctl status run: gitaly: (pid 18804) 521s; run: log: (pid 18340) 661s run: gitlab-monitor: (pid 18836) 519s; run: log: (pid 18497) 630s run: gitlab-workhorse: (pid 18822) 520s; run: log: (pid 18367) 655s run: logrotate: (pid 18430) 643s; run: log: (pid 18429) 643s run: nginx: (pid 18414) 649s; run: log: (pid 18413) 649s run: node-exporter: (pid 18469) 637s; run: log: (pid 18468) 637s run: postgres-exporter: (pid 18861) 517s; run: log: (pid 18561) 607s run: postgresql: (pid 18163) 734s; run: log: (pid 18162) 734s down: prometheus: 0s, normally up, want up; run: log: (pid 18527) 618s run: redis: (pid 18103) 740s; run: log: (pid 18102) 740s run: redis-exporter: (pid 18512) 624s; run: log: (pid 18511) 624s run: sidekiq: (pid 18324) 667s; run: log: (pid 18323) 667s run: unicorn: (pid 20413) 149s; run: log: (pid 18285) 673s
3.gitlab 登录
- 浏览器输入 IP 10.0.0.71 直接访问
- 设置登录密码
4.gitlab 设置
- 设置邮箱
5. 开发者设置ssh密钥
-
第1步: 在开发者电脑上产生空密码密钥
[root@gitlab ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "dev1@itcast.cn" -N "" Generating public/private rsa key pair. Created directory '/root/.ssh'. Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:n1GGXMhB74JIAVwJeejn0TqkcplYFQbYcoeQK0z3Or4 dev1@itcast.cn The key's randomart image is: +---[RSA 2048]----+ | .*+O=o ooo. | | .+.B.=. .o+ | |o .=.+.. o + | |...以上是关于程序员必会的git语法及gitlabgithub应用的主要内容,如果未能解决你的问题,请参考以下文章