[转] 00.Git学习笔记

Git学习笔记

前言:用了比较长时间的github了,一直都不能把git理清楚,于是决定整理一下git的学习笔记,供自己梳理和回顾。

说明:这里思路是B站up狂神的git教学狂神聊Git,给大家安利一下这个up,他许多视频都很不错。


版本控制

版本控制 版本迭代的版本管理器(Revision control)

尤其在多人开发中,使用版本控制尤为重要

 

常见的版本控制工具

主流的版本控制器有:

  • Git

  • SVN (subversion)

  • CVS (Concurrent Version System)

  • VSS (Micorosoft Visual SourceSafe)

  • TFS (Team Foudation Server)

  • Visual Studio Online

现在影响力最大也是使用最广泛的是GitSVN

 

版本控制分类

  1. 本地版本控制

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

    本地版本控制

     

  2. 集中版本控制

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

    集中版本控制

    所有的版本数据保存在服务器上,用户本地只有自己的以前所同步的版本,如果不联网,用户看不到历史版本,也午饭切换版本验证问题,或者不同分支工作。而且,所有有数据都保存在单一服务器上,一旦服务器损坏就会丢失所有数据,需要定期备份。代表有:SVN CVS VSS

     

  3. 分布式版本控制

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

    分布式版本控制

     

Git和SVN的区别

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

 

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

 

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

 

 

Git的诞生

GIt是Linux社区 (特别是Linux的缔造者Linus Torvalds) 基于使用BitKeeper时的经验教训,开发出的自己的版本系统。大约花了两周左右,也就是后来的Git

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

 

 

Git环境配置

Git下载

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

下载过慢就是用镜像下载淘宝镜像

 

Git卸载

直接反安装即可、清理环境变量

 

Git安装

无脑下一步安装即可。

 

启动Git

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

Git项

 

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目录

    切勿随意在Linux系统中使用rm -rf / ,会从根目录全部递归删除,那么会删除电脑中全部文件。

  9. mv 移动文件,mv index.html src index.html 是我们要移动的文件,src是目标文件夹,这么写必须在同一目录下。

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

  11. clear 清屏

  12. history 查看命令历史

  13. help 帮助

  14. exit 退出

  15. #表示注释

 

Git配置

查看配置 git config -l

git config -l

 

查看不同级别的配置文件 (都保存在本地) :

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

Git相关的配置文件:

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

  2. C:\UsersAdminstrator\ .gitconfig 只适用于当前登录用户配置 --global 全局

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

 

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

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

 git config --global user.name "lihengxu" # 名称
 git config --global user.email 15882320389@163.com # 邮箱

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

全局配置

 

 

 

Git基本理论 (核心)

工作区域

Git本地有三个工作区域:

  1. 工作目录(Working Direcitory)

  2. 暂存区(Stage/Index)

  3. 资源区(Repository 或 GIt Directory)

如果加上远程的

  1. Git仓库(Remote Directory)

就可以分为4个工作区域,转换关系如下:

工作区域关系

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

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

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

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

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

HEAD指向版本

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

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

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

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

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

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

 

工作流程

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

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

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

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

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

git工作流程

 

 

 

Git项目搭建

创建工程目录与常用指令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你的项目的目录,也可以是一个空目录,建议不要有中文,日常使用一下图中6个命令:

常用命令

 

本地仓库搭建

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

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

     # 当前目录中新建一个Git代码库
     $ git init
  2. 执行后可以看到,仅仅在项目中多出了一个.git目录,关于版本等的所有信息都在这个目录里面。

 

克隆远程仓库

  1. 另一种方式是克隆远程目录,也就是将远程服务器上的仓库完全镜像一份到本地。

     # 克隆一个项目和它整个历史代码(版本信息)
     $ git clone https://github.com/LihengXu/WPS_Apolloscape.git
  2. 去gitee或者github上克隆一个测试

 

 

 

Git文件操作

文件4种状态

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

  • 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 .
 
 # 提交暂存区中内容到本地仓库,-m 提交信息
 git commit -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
 # 通常前后端项目都需要的.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/
 
 *.log
 tmp/
 
 #rebel
 *rebel.xml*

 

 

 

 

使用码云gitee

国内一般使用gitee,而通常全球范围内大多都是用github,两者使用几乎一致,有些公司会自己搭建gitlab服务器

  1. 注册登录码云,完善个人信息,点击自己头像选设置

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

     # 进入C:\Users\Administrator\.ssh目录
     # 生成公钥,-t rsa是选择加密方式
     ssh-keygen -t rsa

    公钥生成结果

  3. 将公钥信息public key (打开上面的.pub文件,这就是公钥)添加到码云账户中即可

    添加公钥处

    添加成功后

     

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

    新建仓库的位置

    新建仓库

    若公开的话有一个许可证选项:

    开源是否可以随意转载,开源但是不能商用,等等各种限制协议。

    新建仓库2

  5. 最后克隆至本地即可

    git clone https://gitee.com/lihengxu/gitstudy.git

 

 

 

 

 

IDEA中集成Git

(和Pycharm基本相同)

  1. 新建项目,绑定git

    • 将远程的git文件目录直接拷贝到项目中即可,或者直接创建项目到git文件目录下

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

    • 添加到暂存区:命令行 git add . ;或者手动鼠标右键点文件,选GIt然后点Add

    • commit提交:界面右上角有一个commit选项,点击后选择,并输入一下message即可

    • push到远程仓库:直接在命令行中输入git push即可

  3. 提交测试

 


以上全部都不涉及分支,全是单人操作


 

 

Git分支

分支类似平行宇宙的概念,适用于多人协同开发

当存在多个分支,我们进行分支合并时,可能会有冲突产生

git分支

git分支中常见命令:

# 列出所有本地分支
git branch

# 列出所偶远程分支
git branch -r

# 新建一个分支,但依然停留在当前分支
git branch [branch -name]

# 切换到该分支
git checkout [branch]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 重命名分支
git branch -m [branch -oldname] [branch -newname]

# 合并指定分支到当前分支
$ git merge [branch]

# 中止这一次提交的合并(当遇到冲突时)
$ git merge --abort

# 将分支变基(Rebase)到master
# 先切换到分支,再完成变基
$ git checkout [branch]
$ git rebase master

# 删除分支
$ git branch -d [branch -name]

# 删除远程分支
$ git push origin --delete [branch -name]
$ git branch -dr [remote/branch]

 

想要形象的快速理解分支的概念,推荐一款图形化客户端GitKraken

建议使用github账号关联登录,这里推荐教程以及关于分支的进阶教程

 

注意主分支master应该非常稳定,只有分支代码稳定之后才能合并到主分支上。

 

 

 

总结

  1. Git其实还是比较简单的,很多命令其实只要多用就能熟悉,尤其时分支的操作,这部分用图形界面多使用就能理解得更深刻

  2. gitee下面有一个git大全,更多得一些插件,命令都能在里面查询。

posted @ 2020-08-21 01:19  LihengXu  阅读(30)  评论(0)    收藏  举报