0%

Git学习

版本控制

什么是版本控制——版本迭代、新的版本!

版本控制(revison control),为满足多人开发必须使用版本控制。

主流版本控制工具

  • git
  • svn
  • cvs
  • vss
  • tfs

其实还有一堆,但是学最主流的就可以了。

  1. 本地版本控制

  2. 集中版本控制 SVN

  3. 分布式版本控制 Git

    每个人都拥有全部代码!安全隐患!不会因为网络、服务器原因造成不能工作!

Git与SVN的区别

Git 分布式,本地和云端都有全部代码。

SVN集中式,每次都需要拉去和上传到集中服务器。

Git历史

linux和Git之父(Linus Benedic Torvalds)1969

东西来源于BitKeeper来管理和维护代码。后来开发Git替换BitKeeper这个收费软件。

Git环境配置

Git Bash: Unix与Linux风格的命令行,使用最多,推荐最多。 例如:清屏幕 clear

Git CMD:Windows风格的命令行 例如:清屏幕 cls

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

Git基本命令

  1. cd:改变目录
  2. cd ..:回到上一个目录,直接cd进入默认目录
  3. pwd:显示当前所在的路径。
  4. ls(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 /) 牛逼!!!!
  9. mv :移动文件,mv index.html src ,index.html 是我们要移动的文件,src是目标文件夹,当然
  10. reset:重新初始化终端/清屏
  11. clear:清屏。 windows对应的为cls
  12. history:产看命令历史
  13. help:帮助
  14. exit:退出
  15. 表示注释

Git 配置

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

Git 相关配置文件:

  1. Git\etc\gitconfig :Git 安装目录下的 gitconfig — system 系统及
  2. C:\Users\Administrator\ .gitconfig 只适用于当前登陆用户的配置。—global 全局

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

查看配置

1
2
3
4
5
6
7
8
9
git config -l

#查看系统config
git config --system --list

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


GIt 设置

1
2
3
4
5
6
7
#名称

git config --global usr.name “name”

#邮箱

git config --global user.email xxxxx@gmail.com

Git 基本理论(核心)

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

image-20201103142705381

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

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

94e1299487ed33b762c382fa560e4bd3

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

  1. 在工作目录中添加、修改文件;
  2. 将需要进行版本管理的文件放入暂存区域; git add
  3. 将暂存区域的我文件提交到git 仓库; git commit

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

809218-20160604213832164-1203726937

Git项目搭建

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

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

v2-e170c437b905730fa48be241609635d8_1440w

在本地搭建一个仓库

方法一:创建全新的仓库

  1. 创建全新的仓库,需要用git 管理的项目的根目录执行:
1
2
#当前目录新建一个Git代码库
~$ git init
  1. 执行后可以看到,仅仅在项目目录多出一个.git目录,关于版本等的所有信息都在这个目录里面。

方法二:克隆远程仓库

由远程服务器上的仓库完全镜像到本地一份

1
~$ git clone [url]

Git文件操作

文件的4种状态

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

  • Untracked:未跟踪,此文件在文件夹中,但没有加入到git 库,不参加版本控制,通过 git add .状态变为stage
  • Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件两种去处,如果它被修改,而变为Modified。如果使用git rm移出版本库,则成为Untracked文件。
  • Modified:文件已经修改,仅仅是修改,并没有进行其他操作。这个文件也有两个去处,通过 git add可以进入暂存staged状态,使用git checkout则丢弃修改过,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!
  • Staged:暂存状态,执行git commit则将修改同步到库中,这个时候库中的文件和本地的文件又变为一致,文件为Unmodify状态。执行git reset HEAD filename取消暂存,文件状态为Modified

查看文件状态

上面手文件有4中状态,通过一下命令可以查看到文件的状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
#查看文件的状态
~$ git status [filename]

#查看所有文件的状态
~$ git status

#添加所有文件到暂存区
~$ git add .

#提交暂存区中的内容到本地仓库 -m 提交信息
~$ git commit -m “消息内容”


忽略文件

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

在主目录下建立一个“.gitignore”文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问好(?)代表一个字符,方括号([abc])代表可选字符范围,打括号({string1,string2,……})代表可选的字符
  3. 如果名称前有一个感叹号(!),则表示例外,将不被忽略。
  4. 如果名称的最前面有一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
1
2
3
4
5
6
#为注释
*.txt #忽略所有 .txt结尾的文件
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其他目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #忽略 doc/notes.txt 但不包括 doc/server/arch.txt

Git的分支

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

git 分支中常用的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#列出所有本地分支
~$ git branch

#列出所有远程分支
~$ git branch -r

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

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

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

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

#删除分支
~$ git push origin --delete [branch-name]

#删除远程分支
~$ git branch -dr [remote/branch]

多个分支如果并行,就会导致我们代码冲突,也就是同时存在多个版本!

如果同一个文件在合并分支是都被修改了则会引起冲突:解决办法就是我们可以修改冲突文件重新提交!

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