Git入门

Git分布式版本控制工具


1、概述


1.1、什么是版本控制?

版本迭代—>新的版本–>版本管理器

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

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

简而言之就是用于管理多人协同开发项目的技术

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

多人开发就必须要使用版本控制,否则代价会比较大

1.2、常见的版本控制工具

  • GIT
  • SVN(Subversion)
  • CVS(Concurrent Version System)

1.2.1、版本控制分类

版本控制分类

1.2.2、Git和SVN最主要区别

SVN 是集中式的版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作,对网络带宽要求较高

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

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了

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

创始人:Linux和Git之父林纳斯托瓦兹( Linus Benedict Torvalds) 1969、芬兰赫尔辛基人

2、Git安装和常用命令


2.1、Git环境配置

软件下载

打开git官网,下载对应操作系统的版本

官网

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

官网下载太慢,推荐使用淘宝镜像下载:镜像下载

Git入门_第1张图片

选择对应的电脑版本下载,无脑下一步安装即可

启动Git

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

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

Git CMD:Windows风格的命令行

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

2.2、基本的Linux命令

2.2.1、关机和重启

关机

  • shutdown -h now 立刻关机
  • shutdown -h 5 5分钟后关机
  • poweroff 立刻关机

重启

  • shutdown -r now 立刻重启
  • shutdown -r 5 5分钟后重启
  • reboot 立刻重启

2.2.2、目录切换 cd

  • cd / 切换到根目录
  • cd …/ 切换到上一级目录 或者 cd …
  • cd ~ 切换到home目录
  • cd - 切换到上次访问的目录

2.2.3、目录查看ls

ls 查看当前目录下的所有目录和文件

ll 查看当前目录下的所有目录和文件,包含隐藏文件

2.2.4、目录操作【增,删】

mkdir demo 在当前目录下创建一个名为demo的目录

mkdir demo/chapter 在指定目录下创建一个名为chapter的目录

rm -r demo 递归删除当前目录下的demo目录

2.2.5、文件操作【增,删】

命令:touch 文件名

示例:在当前目录创建一个名为index.js的文件 touch index.js

命令:rm 文件名

示例:在当前目录删除一个名为index.js的文件 rm index.js

2.2.6、移动目录

mv 要移动的对象(文件等) 目标目录

mv index.html chapter 将index.html移动到chapter 目录中

2.2.7、扩展

reset:重新初始化终端

clear:清屏

history:查看历史命令

help:帮助

exit:退出

#:表示注释(一般不在终端写注释)

2.3、Git基本配置

2.3.1、设置用户信息

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

  1. 打开Git Bash
  2. 设置用户信息
git config --global user.name "Mr zhang"	# 用户名称
git config --global user.password "xxxxx.qqcom"	# 邮箱

查看配置信息

git config --global user.name
git config --global user.email

2.3.2、为常用指令配置别名

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名

  1. 打开用户目录,创建 .bashrc 文件

    部分windows系统不允许用户创建点号开头的文件,可以打开GitBash,执行touch ~/.bashrc

  2. .bashrc 文件中输入如下内容:

    # 用于输出git提交日志
    alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
    # 用于输出当前目录所有文件及基本信息
    alias ll='ls -al'
    
  3. 解决GitBash乱码问题

    3.1、打开GitBash执行下面命令

    git config --global core.quotepath false
    

    3.2、 在电脑安装的git目录中,${git_home}/etc/bash.bashrc 文件最后加入下面两行

    export LANG="zh_CN.UTF-8"
    export LC_ALL="zh_CN.UTF-8"
    

2.3.3、 获取本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库

1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库

2)进入这个目录中,点击右键打开Git bash窗口

3)执行命令git init

4)如果创建成功后可在文件夹下看到隐藏的.git目录

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git 的命令而时刻发生变化!

2.4、Git基本理论(核心)

工作区域

Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或

Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

Git入门_第3张图片

  • Workspace: 工作区,就是你平时存放项目代码的地方
  • Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

工作流程

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

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

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

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

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

2.5、Git项目搭建

本地仓库搭建

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

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

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

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

克隆远程仓库

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

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

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

2.6、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

Git入门_第4张图片

查看文件状态

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

# 查看指定文件状态
git status [filename]
# 查看所有文件状态
git status
# 添加指定文件到暂存区
git add '文件名'
# 添加所有文件到暂存区
git add .
# 提交暂存区的内容到本地仓库  -m 提交信息
git commit -m "提示消息"
# 查看提交日志
git log
# 回退版本
git reset --hard [提交标识]
# 查看已经删除的提交记录
git reflog

注:提交标识]可以用 git-log 或 git log 指令查看

忽略文件

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

在主目录下建立".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

2.7、使用码云

由于github是国外的,有一道墙,访问会比较慢,在国内,推荐使用gitee

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

2、设置本机绑定SSH公钥,实现免密登录

# 进入 C:\users\86186\.ssh 目录
# 生成公钥
ssh-keygen -t rsa
# 查看生成公钥
cat ~/.ssh/id_rsa.pub
# 验证是否配置成功
ssh -T [email protected]

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

Git入门_第5张图片

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

新建仓库填写相关信息即可

Git入门_第6张图片

2.8、操作远程仓库

2.8.1、添加远程仓库

先初始化本地库,然后与已创建的远程库进行对接

# 链接远程仓库,创建主分支
git remote add origin 远程仓库地址

远程名称:默认是origin,取决于远端服务器设置

仓库路径:从远端服务器获取此URL

2.8.2、查看远程仓库

git remote

2.8.3、推送到远程仓库

# 推送到远端的同时并且建立起和远端分支的关联关系
git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]
# 把本地仓库的变化连接到远程仓库主分支
# git push [remote -name] [branch-name]
git push origin master

注:

  • 如果远程分支名和本地分支名称相同,则可以只写本地分支
  • git push origin master
    • -f 表示强制覆盖
  • --set-upstream 推送到远端的同时并且建立起和远端分支的关联关系。
    • git push --set-upstream origin master
  • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名
    • git push 将master分支推送到已关联的远端分支

2.8.4、删除远程仓库(谨慎操作)

# 删除关联的origin的远程仓库
git remote rm 远程仓库名称

2.8.5、从远程仓库克隆

如果已经有一个远端仓库,我们可以直接clone到本地

# 从远程仓库克隆
# 本地目录可以省略,会自动生成一个目录
git clone <远程仓库路径> [本地目录]

2.8.6、从远程仓库中抓取和拉取

远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本
地,再进行操作

抓取 命令:git fetch [remote name] [branch name]

抓取指令就是将仓库里的更新都抓取到本地,不会进行合并

拉取 命令:git pull [remote name] [branch name]

  • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
  • 如果不指定远端名称和分支名,则抓取所有并更新当前分支

2.9、Git分支

# 显示所有本地分支
git branch
# git-log也可显示分支信息
git-log
# 新建一个分支
git branch dev01
# 切换到指定分支
$ git checkout dev01
# 新建一个分支,并切换到该分支
$ git checkout -b dev02
# 删除一个分支
git branch -d dev01 	# 删除分支时,需要做各种检查
git branch -D dev01 	# 不做任何检查,强制删除
# 合并指定分支到当前分支 需先切换到master主分支上
git merge dev02

你可能感兴趣的:(运维,git)