Git

Git

官网地址:

Gitee - 基于 Git 的代码托管和研发协作平台

Github - # 全球最大的程序员基友社区 - Git平台

常用:

git init                              # 初始化本地代码仓

git add .                             # 添加本地代码

git commit -m "add local source"      # 提交本地代码

git pull origin master                # 下载远程代码

git merge master                      # 合并master分支

git push -u origin master             # 上传代码

命令大全:

git init #初始化仓库

git add . #添加到暂存区

git status #查看状态

git commit -m "first commit" #提交代码到本地

git remote add origin [url的远程地址] #提交到远程

git push -u origin “master” #将当前分支推送到origin主机的对应分支--master

git pull origin master #将远程master上的代码pull下来

git merage <分支名称> #将<某个如:dev>分支的代码合并到master上

git checkout master #切换分支到master上

git log #查看日志信息 -p #查看指定文件提交历史

git blame #以列表方式查看指定文件的提交历史

git branch -a #查看所有分支

git remote update origin --prune #更新远程分支列表

git push origin --delete dev #删除远程分支dev

git branch -d dev #删除本地分支dev

git push -f #强推远程

git reset --hard 提交id #回退到指定的id

git clone #克隆远程到本地

git remote #列出已经存在的远程仓库

git remote -verbose #列出远程仓库的详细信息,在别名后面列出URL地址

git commit --amend #修改上次提交的描述信息

git fetch <远程仓库的别名> #将远程仓库所有分支的最新版本全部拉取到本地

git fetch <远程主机名> <分支名> #将远程仓库指定分支的最新版本取回到本地

git diff #显示变更内容

git mv     # 文件改名

git rm #删除文件

参考文章:

git常用命令大全【建议收藏】-git-PHP中文网

Git 常用命令大全 (runoob.com)

Git命令大全 - 简书 (jianshu.com)

常用 Git 命令总结 - 知乎

什么是版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

  • 实现跨区域多人协同开发

  • 追踪和记载一个或者多个文件的历史记录

  • 组织和保护你的源代码和文档

  • 统计工作量

  • 并行开发、提高开发效率

  • 跟踪记录整个软件的开发过程

  • 减轻开发人员的负担,节省时间,同时降低人为错误

简单说就是用于管理多人协同开发项目的技术。

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。

无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具!

多人开发就必须要使用版本控制!

简单理解:就是代码的快照。把你的代码拍个照片上传到服务端。

目标:

掌握了解什么是Git,在实际中处于什么角色

目标

在项目开发中,团队协作管理代码和文件是每天必须要做的一些事情,大家一定会碰到以下几种情况和问题?

  1:协同修改,多人并行开发修改服务器的文件
  2:数据备份
  3:版本控制,权限控制
  4:如果文件和工程误删了还能找回来吗?
  5:分支管理 1.0 2.0
  - tags标签
  6:遇到文件冲突如何解决?
  7:如何把一些我临时保存的文件不要提交?

常见的版本控制工具

我们学习的东西,一定是当下最流行的!

主流的版本控制器有如下这些:

  • Git

  • SVN(Subversion)

  • CVS(Concurrent Versions System)

  • VSS(Micorosoft Visual SourceSafe)

  • TFS(Team Foundation Server)

  • Visual Studio Online

版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVNimage-20220725154158674

 

Client / Server

  • 为什么软件都需要一个服务器来充当客户端Server。

  • 客户端就是去连接Server的一个客户。他可以拥有对Server进行文件上传和处理的一些能力

image-20220725155008104

 

版本控制分类

1、本地版本控制

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。

image-20220426145946974

 

2、集中版本控制 SVN

传统的版本控制工具 SVN

  • 集中式的版本控制工具

  • 特点:

    • 服务端

    • 多个客户端(开发人员)

    • 每个开发人员的代码的版本都在svn server

    • svn server 的体积会越来越大,影响代码的提交和下载速度和性能。

    • svn 不能离线(除非你svn server云服务)

image-20220725155942236

 

这些问题的解决方案可以使用今天要讲的版本控制工具:Git能统统解决掉。

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改

image-20220426150312141

 

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS

3、分布式版本控制 Git

每个人都拥有全部的代码!安全隐患!

在官网明确定义:Git是一个开源、免费的分布式版本控制系统!

Git是目前世界上最先进的分布式控制系统(没有之一)。

Git有什么特点?简单来说:高端大气上档次!

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况!

image-20220426150702081

 

小结

  • svn和git都是做版本控制的,如果不理解一句话:记录代码的轨迹就好比每个人的成长阶段一样。

  • 但是svn它集中式的版本控制,不能离线工作。git分布式的版本控制,它版本放在用户自己的电脑。

  • svn不支持离线工作,版本全部放在中央服务器,如果中央服务器挂了,那么版本全部消失。

  • git支持离线工作。版本放在用户自己的电脑上完成。- - - - 分布式的版本控制。

  • svn 是所有的鸡蛋放在一个篮子里,篮子没了鸡蛋也就全没了。

  • git 是用户自己的鸡蛋放在自己的篮子里。我可以选择性的把一些鸡蛋放入公共篮子里。公共的篮子挂了,不会影响自己篮子的鸡蛋。

Git与SVN的主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

img

 

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

Git是目前世界上最先进的分布式版本控制系统。

image-20220725162324571

聊聊Git的历史

同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

Linux社区中存在很多的大佬!破解研究 BitKeeper !

到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。(2周左右!) 也就是后来的 Git!

Git是目前世界上最先进的分布式版本控制系统。

Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!

img

 

Linux和Git之父李纳斯·托沃兹(Linus Benedic Torvalds)1969、芬兰

Git环境配置

软件下载

打开[git官网] https://git-scm.com/,下载git对应操作系统的版本。

所有东西下载慢的话就可以去找镜像!

官网下载太慢,我们可以使用淘宝镜像下载:

image-20220426153010917

 

下载对应的版本即可安装!

安装:无脑下一步即可!安装完毕就可以使用了!

启动Git

安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序!

img

 

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

常用 的Linux命令

平时一定要多使用这些基础的命令!

  1. cd : 改变目录。

  2. cd . . 回退到上一个目录,直接cd进入默认目录

  3. pwd : 显示当前所在的目录路径。

  4. ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。

  5. touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。

  6. rm: 删除一个文件, rm index.js 就会把index.js文件删除。

  7. mkdir: 新建一个目录,就是新建一个文件夹。

  8. rm -r : 删除一个文件夹, rm -r src 删除src目录

  rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!
  1. mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。

  2. reset 重新初始化终端/清屏。

  3. clear 清屏。 cls

  4. history 查看命令历史。

  5. help 帮助。

  6. exit 退出。

  7. #表示注释

Git设置

所有的配置文件,其实都保存在本地!

查看配置 git config -l

image-20220426160934137

 

查看不同级别的配置文件:

  #查看系统config
  git config --system --list
 
  #查看当前用户(global)配置
  git config --global --list
  git config user.name

Git相关的配置文件:

1)、Git\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级

2)、C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 --global 全局

image-20220426162413266

 

这里可以直接编辑配置文件,通过命令设置后会响应到这里。

设置用户名与邮箱(用户标识,必要)

步骤

格式:

  git remote rm origin 从当前数据库中删除现有的关联
  git remote add origin xxx的远程仓库地址https / git

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

1、配置账号和密码(设置开放者的姓名和邮箱)

  git config --global user.name "yykk" #名称
 
  git config --global user.email 2724964601@qq.com   #邮箱
 
  git config --global --list # 查看配置账户的信息

2、添加本地仓库和远程仓库的关联-https连接

  git remote add origin https://gitee.com/ZhaoChongRu/pug-admin.git
 
  如果删除之前关联
  git remote rm origin
  git remote add origin 改成新地址

初次关联使用提交代码的时候需要填写,账号和密码信息。

3、添加本地仓库和远程仓库关联-ssh连接(免密)

git remote add origin git@gitee.com:ZhaoChongRu/pug-admin.git

只需要做一次这个设置,如果你传递了--global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。总之--global为全局配置,不加为某个项目的特定配置。

image-20220426162452307

 

如果是mac 用户可以找不到文件夹的可以参考一下博客:https://blog.csdn.net/weixin_38934440/article/details/122356963

扩展:寻找mac 上的与隐藏文件可以使用命令:command + shift + .

总结:

  • 配置全局配置的作者:在用户目录下的 .gitconfig 中进行查找。也就告诉你可以不用命令直接修改。

  • 全局配置对未来的所有git管理的项目都是用这个签名作为作者的名字。邮箱也是如此。

  • 局部配置的优先级高于全局配置。

  • 配置只会在本地仓库有效,远程仓库会自动使用远程的昵称。

Git基本理论(重要)

三个区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

image-20220426163328041

 

  • Workspace:工作区,就是你平时存放项目代码的地方

  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

image-20220426163410051

 

  • Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。

  • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。

  • .git:存放Git管理信息的目录,初始化仓库的时候自动创建。

  • Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。

  • Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。

  • Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

工作流程

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

image-20220426163617693

 

版本核心文件的解释

目录 描述
confg 该文件 主要记录针对该项目的一些配置 信息,例如是否以bare方式初始化、remote的信息等, 通过git remote add命令增加的远程分支的信息就保存在这里;
objects Git中的文 件和一些操作 都会以git对象来保存,git对 象分为BLOB、tree和commit三 种类型,例如git commit便是git中的commit对象,而各个版本之间是通过版本树来组织的,比如当前的HEAD会指向某个commit对象,而该commit对象又会指向几个BLOB对象或者tree对象。
HEAD 该文件指明 了git branch (即当前分支)的结果,比如当前分支是master,则该文件就会指向master,但是并不是存储一个master字符串, 而是分支在refs中的表示,例如ref:refs/heads/master
index 该文件保存 了暂存区域的信息。该文件某种程度就是缓冲区(staging area),内容包括它指向的文件的时间觀、文件名、sha1值等;
Refs 该文件夹存储指向数据(分支)的提交对象的指针。

Git命令入门到精通

文件和代码整个版本的形成过程。是不可逆也不可跳跃。不能直接commit形成版本,需要先执行 git add。

01、git init 初始化仓库

02、git add file / git add . 添加代码到暂存区(好处是:可以减少垃圾版本的生成)

  • 不能提交空目录

03、git commit -m ‘xxx’ 将我们的文件全部提交到当前分支,形成文件的版本(真正的版本生成)

  • 不能提交空目录

04、git status 查看当前状态

  • git status - - - 红色 代表没有执行git add

  • git status - - - 绿色 代表执行了git add 还没git commit

  • git status - - - 无 代表了当前工作区间没有形成版本的文件了(说明已经打成版本了)

05、git log 查看日志,往后看

  • 使用enter进行翻页,按ctrl + c 退出

  • 如果消息太多,看到眼花缭乱,可以试试加上 --pretty=online参数

  • 缩小版:git log --oneline

06、git restore xxx(文件名) 撤回,注意点 :不能在git add 之后进行操作!

07、git reset HEAD^ 版本回退 :一个^代表回退一个版本

  • git reset HEAD^ ——— 可以写成这样:git reset head~1(数字参数代表回退几个版本)

  • git reset --hard [commit id] 就是你的版本号 ,可以git log --oneline查看

08、git reflog 版本前进,往前看:与回退一样也可以使用~ ^操作! 查看之后也是通过git reset --hard [commit id] 进行操作!

Git提示我们,现在文件已将修改,等待被staged(暂存)。我们有两个选择:

1)可以使用git add添加到暂存区,接着去提交文件

2)可以使用git checkout --<file>来撤销修改,可以撤销已经git add 的文件

3)可以使用git restore --<file>只能撤销未git add的文件

08、git diff HEAD 显示工作区与当前分支最新commit之间的差异

09、git remote add origin https/git地址

10、git remote rm origin 远程仓库地址,删除关联!

  • 此命令只会从本地仓库移除远程仓库的记录,并不会真正影响到远程仓库!

11、git remote 查看已经git remote的信息

12、git push -u origin master 提交到远程仓库

13、git clone https/git 地址

14、git pull origin master 从远程仓库中获取最新版本并merge到本地仓库

15、git fetch origin master 而git fetch是从远程仓库获取最新版本到本地仓库,不会自动merge

Git项目搭建

创建工作目录与常用指令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。

日常使用只要记住下图6个命令:

image-20220426163839822

 

本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

1、创建全新的仓库,需要用GIT管理的项目的根目录执行:

  # 在当前目录新建一个Git代码库
 
  $ git init

2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。

克隆远程仓库

1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!

  # 克隆一个项目和它的整个代码历史(版本信息)
 
  $ git clone [url] # https://gitee.com/kuangstudy/openclass.git

2、去 gitee 或者 github 上克隆一个测试!

Git文件操作

文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

查看文件状态

上面说文件有4种状态,通过如下命令可以查看到文件的状态:

 #查看指定文件状态
 git status [filename]
 
 #查看所有文件状态
 git status
 
 # git add .                 添加所有文件到暂存区
 
 # git commit -m "消息内容"   提交暂存区中的内容到本地仓库 -m 提交信息

忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。

  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。

  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。

  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。

  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

 #为注释
 
 *.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
 
 !lib.txt     #但lib.txt除外
 
 /temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
 
 build/       #忽略build/目录下的所有文件
 
 doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

使用码云

github 是有墙的,比较慢,在国内的话,我们一般使用 gitee ,公司中有时候会搭建自己的gitlab服务器

这个其实可以作为大家未来找工作的一个重要信息!

1、注册登录码云,完善个人信息

image-20220426172257843

 

2、设置本机绑定SSH公钥,实现免密码登录!(免密码登录,这一步挺重要的,码云是远程仓库,我们是平时工作在本地仓库!)

 # 进入 C:\Users\Administrator\.ssh 目录
 # 生成公钥
 ssh-keygen

image-20220426174519641

 

3、将公钥信息public key 添加到码云账户中即可!

img

 

4、使用码云创建一个自己的仓库!

image-20220725180057784

 

许可证:开源是否可以随意转载,开源但是不能商业使用,不能转载,... 限制!

image-20220725180146510

 

image-20220725180211104

 

第一次创建的项目是不开源的,只能自己查看,其他的好友或者是开发者都无法查看,会提示:404也无法下载和clone!

如何开源呢?

image-20220725180810709

 

image-20220725180827802

 

注意空项目是不能直接开源的!

克隆到本地!

IDEA中集成Git

1、新建项目,绑定Git。

将我们的远程项目拷贝过来即可! | 或者直接创建同名文件夹打开!

image-20220426183813861

 

注意观察idea中的变化

image-20220426183926793

 

2、修改文件,使用IDEA操作git。

  • 添加到暂存区

  • commit 提交

  • push到远程仓库

3、提交测试

image-20220426185355797

 

这些都是单个人的操作!

学习的方式最重要!学会学习!我上课的更多时候都是在教大家去学习一种理念和思想(学习方式)

有道无术、术尚可求。有术无道、止于术!

.gitignore

  *.class
  *.log
  *.lock
 
  # Package Files #
  *.jar
  *.war
  *.ear
  target/
 
  # idea
  .idea/
  *.iml/
 
  *velocity.log*
 
  ### STS ###
  .apt_generated
  .factorypath
  .springBeans
 
  ### IntelliJ IDEA ###
  *.iml
  *.ipr
  *.iws
  .idea
  .classpath
  .project
  .settings/
  bin/
 
  tmp/
 
  #rebel
  *rebel.xml*

前端开发

 .DS_Store
 node_modules
 /dist
 
 # local env files
 .env.local
 .env.*.local
 
 # Log files
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
 
 # Editor directories and files
 .idea
 .vscode
 *.suo
 *.ntvs*
 *.njsproj
 *.sln
 *.sw*
 
 build/env.js

如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!选择要保留他的代码还是你的代码!

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

Git分支——Branch

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味 着你可以把你的工作从开发主线上分离开来,以免影响开发主线,Git 的master分支并不是个特殊分支。 它跟其它分支没有区别, 之它所以几乎每一个仓库都有 master分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动在本章节我们会学习到关于分支的相关命令,具体如下:

  • 查看分支

  • 创建分支

  • 切换分支

  • 推送至远程仓库分支

  • 合并分支

  • 删除分支

分支在GIT中相对较难,分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!

img

 

img

 

git分支中常用指令:

 # 列出所有本地分支
 git branch
 
 # 列出所有远程分支(-a也可以以)
 git branch -r
 git branch -a
 
 # 创建分支并且切换到当前分支
 git branch -b branch-name
 
 # 新建一个分支,但依然停留在当前分支
 git branch [branch-name]
 
 # 新建一个分支,并切换到该分支
 git checkout -b [branch]
 
 # 将新建的分支推送到远程(要先选择之后在进行推送git checkout branch-name)远程在进行pull如果没有拉取下来,请在本地也创建相同的branch-name
 git push origin [branch-name]
 
 # 合并指定分支到当前分支
 $ git merge [branch]
 
 # 删除分支
 $ git branch -d [branch-name]
 
 # 删除远程分支
 $ git push origin --delete [branch-name]
 
 $ git branch -dr [remote/branch]

Git分支的应用场景

分支在实际中有什么用呢?假设你准备开发-个新功能, 但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交, 又存在丢失每天进度的巨大风险。

工作场景如下:

开发某个网站。

为实现某个新的需求,创建一个分支。

在这个分支上开展工作。

正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理:

切换到你的线上分支(production branch)

为这个紧急任务新建一个分支, 并在其中修复它。

在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。

切换回你最初工作的分支上,继续工作。

Git标签

像其他版本控制系统(VCS) -样,Git 可以给历史中的某一个提交打 上标签,以示重要。比较有代表性的是 人们会使用这个功能来标记发布结点(v1.0、 v1.2等)。标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。

  • 列出已有的标签.创建新标签

  • 将标签推送至远程仓库

  • 检出标签

  • 删除标签

常用命令:

  # 列出所有tag
  git tag
 
  # 查看tag信息
  git show [tag]
 
  # 创建新标签的命令
  git tag [tagname]
 
  # 将标签推送至远程仓库
  git push [remote] [tag]
 
  # 删除本地tag
  git tag -d [tag]
 
  # 删除远程tag
  git push origin :refs/tags/[tag]

TortoiseGit

Github:https://github.com/TortoiseGit/TortoiseGit

下载地址:https://tortoisegit.org/download/

tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样

不同的是:git是命令行操作模式,tortoiseGit界面化操作模式,不用记git相关命令就可以直接操作,读者可根据自己情况选择安装

建议先下载git之后,在下载tortoiseGit,这样在进行配置的时候会自动扫描到你的git,方便一点!

详细参考:https://www.cnblogs.com/xiuxingzhe/p/9312929.html

IDEA中操作

01、首先点击idea上方的VCS然后点击Create Git Repository

img

 

02、点击Git进行远程关联,如果没有显示git,可以右键点击项目进行操作!

img

 

出现如下,点击+输入你的仓库地址即可!

img

 

03、idea右上方可以直接快捷操作

image-20220725212919563

 

这里可以在VCS中进行操作、也可以右键点击git进行操作、或者上方的git进行!

如果你之前没有配置远程仓库,在这里也会可以配置的,如下:

image-20220725213159912

 

image-20220725213210751

 

在这里配置也是一样的,如果你配置过了,可以不点击这个!

04、如何使用idea进行代码的下载:

image-20220725213652713

 

然后输入地址即可:

image-20220725213912251

 

可以使用命令进行下载,也可以直接下载zip文件!

注意点:如果你下载完成之后,切记打开配置maven、检查环境!

05、idea创建分支操作:

  1. 点击idea下方的master进行创建

image-20220725220542425

 

  1. 输入创建的branch-name,可以自己选择是否创建并且选中该分支

image-20220725220625341

 

或者你可以idea右键git进行操作:

image-20220725220829121

 

右键合并分支

image-20220426191028155

 

  1. 切换分支

image-20220725221502827

 

  1. 合并分支(先切换会master分支,点击merge合并分支)

image-20220725221711173

 

image-20220725222047132

 

注意:这里分支合并之后,直接进行push进行提交,不要进行commit了,合并的分支已经是一个版本了,所以commit没有效果!

06、idea操作tag

同理上面的branch!

07、idea中git的日志

image-20220725223114575

 

但是不建议在这里使用直接进行处理,或者版本的回退,可以直接使用单个文件的git / local history进行处理,如果出现了版本冲突可以进行选择保存那个!

可以通过compare进行比较,可以发现我们的这次与上次的不一致。

如果版本冲突,出现如下:

image-20220725223357811

 

左边是你的版本、中间是合并的版本、右边是远程的版本!(根据自己情况进行选择处理!)

image-20220725223508287

 

08、如果你执行了Rollback直接覆盖了你的代码,而且没有提交到远程,那么可能会奔溃掉,最后的一个办法打开idea自带的Local history!

不管是idea还是eclipse都可以进行这个操作!使用Revert进行回退!

SSH的配置方式

概述

连接远程仓库,势必会进行其用户验证,这个时候需要频繁的输入用户的账号信息,有没有一种能够免密的操作呢?为什么我们连接好以后就不需要配置用户名和密码了呢?因为windows10系统会帮我们记录用户的凭据信息可以在[控制面板]一凭据管理中获得。

windows中的配置可以通过设置中的凭据进行管理!

但是很遗够的是:在window7系统中没有这种凭据,https的这种方式可能就会出现个现象就是频繁的数据用户名和密码,这样就是件繁项的操作,如何解决呢?没错使用ssh的方式来进行连接。

什么是SSH协议

SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。

使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、 甚至为PPP提供一个安全的"通道" .

如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最早的时候,互联网通信都是明文通信,旦被截获, 内容就暴露无疑。1995年, 芬兰学者TatuYlonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

创建SSH密钥

Git- bash中已经集成了ssh功能,所以我们只需要简单的命令,即可生成密钥: ssh-keygen -t rsa一路回车向下走,不要输入任何内容即可!

ssh-keygen -trsa -路三个回车

image-20220726224555948

 

图解:

image-20220726224628582

 

具体操作步骤如下:

第一步:打开命令工具“git bash here”输入命令 “ssh-keygen -t rsa”生成密钥和私钥

  ssh-keygen -t rsa
  ssh-keygen -t rsa -C

第二步:然后点击【New SSH Keys】按钮,将生成的公钥文件【rd_rsa.pub】内容复制出来。

第三步:打开gitee/github官网:登录- setting - SSH-GPG keys 选择如下:

image-20220726234102345

 

第四步:测试和体验ssh的免密操作

01、添加远程仓库和本地仓库的关联:(origin 是默认的远程版本名称)

git remote add origin git@gitee.com:ZhaoChongRu/pug-ssm-kj.git

提示:如果你想要更换远程仓库地址:

  git remote rm origin# 删除原来的origin
  # 然后执行
  git remote add origin # 添加新的origin远程仓库地址

02、提交代码到远程仓库

git push origin master

远程协作开放-Pull Request

你为什么要进行远程提交(pull request)

假设你要开发一个开源项目,但是这个项目托管了gitee或者github上了。也设置成了开源,但是开发者成员有限,你开源的肯定是针对所有互联网的IT开发人员。你不可能把每个贡献者都拉作为你的开发者或者管理者。这个是不现实的问题。假设你的贡献者有100或者1000个。一句话:开源项目的贡献者不一定是你的员工,可能是朋友,也可能是陌生人。所以说:如何做到跨团队、跨公司、跨地域的提交和管理。就成为了重要的事情。解决方案就是:远程提交(pull request)

准备工作&实现步骤

  1. 准备一个开源项目 pug-admin-pro

  2. 如果你要学习

    1. 最好是用两个账号

    2. 或者邀请好友一起来测试

  3. 所以是好友或者新的账号:fork 项目 pug-admin-pro

  4. 你的好友或者新的账号进行代码的更改,然后发起远程请求提交(pull request)

  5. 作者自己就会在当前的项目中查看有好友或者新的账号提交过来的远程版本

  6. 作何接下来就会进行合并或者拒绝

  7. 从而达到:跨团队、跨公司、跨地域的提交和管理。

好友或者其他人具体操作

image-20220727002026555

 

01、打开开源项目进行fork

image-20220727002228707

 

image-20220727002330747

 

02、加入到你个人项目中,fork之后如下:

当前自己

image-20220727002533769

 

开始进行开发&提交&发起远程提交

  • 新建一个类或者文件以后提交

  • git add / git commit / git push origin master

  • 发起远程提交pull request即可!

image-20220727003118596

 

image-20220727003215807

 

作者操作

可以很清晰的看到,你的好友或者其他人,发布了远程提交的请求过来,让作者进行处理(合并或者拒绝)

image-20220727003411553

 

合并操作

image-20220727003522191

 

image-20220727003550685

 

合并成功

image-20220727003636458

 

总结

  • pull request可以解决跨团队、跨组织、跨地域协同开发的能力。

  • 如果未来看到一个很好的开源项目,对自己有帮助,多使用 fork,因为就算作何关闭了项目也不会影响到你fork的项目。

Gitee挂件

  • 首先你要是开源,不能是私有的

  • 在你的项目设置/仓库挂件

  • 你复制挂件,可以直接跳转到你的项目

GitLabde 的搭建

什么情况下需要这个?

  • 你公司有需求

  • 除非你很闲,电脑有8G

  • 自己创业要搭建私有远程仓库

简介

Gitlab:搭建一个自己或者购本公司的私有远程仓库。提供给自己或者公司内部使用。

和gitee、github的区别:gitlab是私有的远程仓库。gitee、github是公开的远程仓库

相同点:都是远程仓库。

概述

Gitlab官网:https://about.gitlab.com/

Gitlab 是一个用于仓库管理的开源项目,使用 git 作为代码管理工具,并在此基础上搭建起来的 web 服务,Gitlab 产品分为三个发型版本

gitlab-ce:社区版、免费、中小型企业

gitlab-ee:企业版、收费、功能相对比较多

JH(JiHu版):发行版尽在中国销售

区别对比:

安装说明:https://gitlab.cn/install/

首先安装依赖包:

  sudo yum install -y curl policycoreutils -python openssh- server

说明:本教程中示例场景的操作系统为CentOS 7.x 64位,如果你使用CentOS 8系统的ECS实例,运行以上命令将出现找不到依赖包policycoreutils-python的问题,原因是CentOS 8开源的软件中没有该依赖包。此依赖包不影响Gitlab,您可以忽略该问题继续运行下面的命令。

安装步骤如下:

1、 执行以下命令,使用官方脚本添加Yum源。

  curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | bash

2、执行以下命令,安装GitLab.

  yum install -y gitlab-ee

3.执行以下命令,初始化已经安装好的GitLab。

说明:此过程执行3分钟左右,耐心等待。

  gitlab-ctl reconfigure

4、执行以下命令,启动GitLab.

  gitlab-ctl start

启动时间可能有点慢,因为需要启动的服务比较多:查看启动日志

 gitlab-ctl tail

在访问过程中,可能遇到如下错误

hoops, GitLab is taking too much time to respond.出现该问题的原因比较多,以下两种比较常见

可能系统内存不够使用free -周 查看内存使用情况可能是配置的端口和访问的端口不一致; 或者端口冲突

external url 'http://192. 168.10.8:8987'nglnx["listen. ert'] - 8987, 两个端口-定要致

5.访问GitLab

GitLab的访问地址是external _ur1配置的地址,所以访问

 http://ip

6、设置管理员用户密码。

默认管理员用户为root,所以只需要设置root用户的密码即可.GitLab安装初始化后,默认账户名是root, 密码存放在配置文件

 cat /etc/gitlab/install_root_password

Gitlab 常用命令

启动所有GitLab 组件

 gitlab-ctl start

停止所有GitLab 组件

  gitlab-ctl stop

重启所有GitLab 姐件

  gitlab-ctl restart

查看G1tLab 服务状态

  g1tlab-ctl status

重构配置GitLab

如果更改了主配置文件/etc/g1tlab/g1tlab.rb, 需要使用以下这个命令,使配置文件生效;但是会初始化除了gitlab. rb之外的所有文件

  gitlab-ctl reconfigure

查看日志(查看GitLab 所有的日志)

  sudo gitlab-ctl tail

注意点:

如果你要搭建的话,这个服务器只进行代码的管理即可,他会下载很多redis、nginx…会跟你自己的下载有冲突!

参考步骤:https://blog.csdn.net/duyusean/article/details/80011540

参考博客:https://blog.csdn.net/Learning_xzj/article/details/124474713

 

posted @ 2022-04-26 20:00  nakano_may  阅读(23)  评论(0编辑  收藏  举报