1. git入门与实践(1)
2. 什么是git?
Git is a free and open source distributed version control system
Git是一个免费的开源分布式版本控制系统
官网:https://git-scm.com/
Git是一个版本管理控制系统(缩写VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。在编辑新文档覆盖旧文档,会发出警告,这就避免了自己不小心覆盖掉别人写的文档。使用工具维护文档,会比人为方便得多。使用git的核心目的就是管理项目的更新迭代,管理项目的版本,在实际的开发过程中,已经对多个文件进行了更改,突然发现功能的实现思路是有问题的,需要对功能进行重写,但是由于修改的文件过多,已经不能通过编辑器的撤销操作,退回到修改之前的状态,使用git就能很好解决这些问题了。在开发新功能之前,可以将项目的状态保存起来,如果在开发的过程中发现有问题,就可以轻松的将代码恢复到之前的状态。git其实就是将项目开发不同阶段的状态保存起来,以后可以回退到任何阶段。
3. 版本控制
3.1 版本管理
版本管理是一种记录文件变化的方式,以便将来查阅特定版本的文件内容。
即保留文件所有的修改历史记录,可以方便地撤销之前对文件的修改操作。
起初都使用文件夹进行控制。
3.1.1 人为维护文档版本的问题
-
文档数量多且命名不清晰导致文档版本混乱
-
每次编辑文档需要复制,不方便
-
多人同时编辑同一个文档,容易产生覆盖
3.2 版本控制系统
它可以带来哪些好处呢?如:小迪最近在开发一个项目,完成了之后,产品经理就来找小迪,做一些修改,第一天可能我还很有耐心。结果第二天他又来了,改完…第三天又来了…改了n多天,他告诉小迪,拿出第5天修改的就可以了,剩下的都不要了。心中一定飘过了100只cnm,发现之前修改的过程文件都没有留!
那如果开发过程中遇到此类问题怎么解决呢?每次修改都保存一个文件,标注日期和版本号。如果开发周期长,也非常考验我们本机的内存了。但如果产品经理要的是某一天哪个步骤的的工作呢?就不好解决了,这时候就需要版本控制系统来解决了。
git的历史记录就相当于我们平时使用的编辑器,我们频繁的删除、修改、更新都会有记录,一般情况下时间周期较长的项目,但是我们也不需要每次修改都保存记录,就像小迪之前使用autim designer
(画单片机用的软件),这样对内存是个考验,到时候去寻找也是问题。所以git采用主动提交的方式。
4. 安装
官网:https://git-scm.com/
4.1 windows
下载安装有一堆选项,默认安装即可
使用许可声明
选择安装路径
在输入框内输入想要安装到的本机路径,也就是实际文件夹位置,或点击“Browse...”
选择已经存在的文件夹,
然后点击“Next”
按钮继续,进入下图界面:
选择安装组件
上图红框内的选项是默认勾选的,建议不要动。绿色框1
是决定是否在桌面创建快捷方式的。绿色框2
是决定在所有控制台窗口中使用TrueType
字体和是否每天检查Git
是否有Windows
更新的。这些根据自己需要选择。
点击“Next”
按钮进入下图界面:
选择开始菜单页
这个界面是创建开始菜单中的名称,不需要修改,
直接点“Next”
按钮继续到下图的界面:
选择Git文件默认的编辑器
选择默认编辑器,我日常使用Notepad++
作为编辑器,勾选使用Notepad++
(还可选择Nano
、Vim
、Vs code
、Vs code内侧版本
编辑器)作为Git
的默认编辑器
点击“Next”
按钮进入下图界面:
调整您的PATH环境
这个界面是调整您的PATH环境。
第一种配置是“仅从Git Bash
使用Git
”。这是最安全的选择,因为您的PATH
根本不会被修改。您只能使用 Git Bash
的 Git
命令行工具。但是这将不能通过第三方软件使用。
第二种配置是“从命令行以及第三方软件进行Git
”。该选项被认为是安全的,因为它仅向PATH
添加了一些最小的Git
包,以避免使用可选的Unix
工具造成环境混乱。
您将能够从Git Bash
,命令提示符和Windows PowerShell
以及在PATH
中寻找Git
的任何第三方软件中使用Git
。这也是推荐的选项。
第三种配置是“从命令提示符使用Git
和可选的Unix
工具”。警告:这将覆盖Windows工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。
我选择推荐的选项第二种配置
点击“Next”
按钮继续到下图的界面:
选择HTTPS后端传输
这个界面是选择HTTPS
后端传输。
第一个选项是“使用 OpenSSL
库”。服务器证书将使用ca-bundle.crt
文件进行验证。这也是我们常用的选项。
第二个选项是“使用本地 Windows
安全通道库”。服务器证书将使用Windows
证书存储验证。此选项还允许您使用公司的内部根CA
证书,例如通过Active Directory Domain Services
。
我使用默认选项第一项
点击“Next”
按钮继续到下图的界面:
配置行尾符号转换
这个界面是配置行尾符号转换。
第一个选项是“签出Windows
风格,提交Unix
风格的行尾”。签出文本文件时,Git
会将LF
转换为CRLF
。提交文本文件时,CRLF
将转换为LF
。对于跨平台项目,这是Windows
上的推荐设置(“core.autocrlf”
设置为“ true”
)
第二个选项是“按原样签出,提交Unix
样式的行尾”。签出文本文件时,Git
不会执行任何转换。 提交文本文件时,CRLF
将转换为LF
。对于跨平台项目,这是Unix
上的建议设置(“core.autocrlf”
设置为“input”
)
第三种选项是“按原样签出,按原样提交”。当签出或提交文本文件时,Git
不会执行任何转换。不建议跨平台项目选择此选项(“core.autocrlf”
设置为“false”
)
我选择第一种选项
点击“Next”
按钮继续到下图的界面:
配置终端模拟器以与Git Bash一起使用
这个界面是配置终端模拟器以与Git Bash
一起使用。
第一个选项是“使用MinTTY
(MSYS2
的默认终端)”。Git Bash
将使用MinTTY
作为终端模拟器,该模拟器具有可调整大小的窗口,非矩形选择和Unicode
字体。Windows
控制台程序(例如交互式Python
)必须通过“winpty”
启动才能在MinTTY
中运行。
第二个选项是“使用Windows
的默认控制台窗口”。Git
将使用Windows
的默认控制台窗口(“cmd.exe”
),该窗口可以与Win32
控制台程序(如交互式Python
或node.js
)一起使用,但默认的回滚非常有限,需要配置为使用unicode
字体以正确显示非ASCII
字符,并且在Windows 10
之前,其窗口不能自由调整大小,并且只允许矩形文本选择。
我选择默认的第一种选项
点击“Next”
按钮继续到下图的界面:
配置配置额外的选项
这个界面是配置配置额外的选项。
第一个选项是“启用文件系统缓存”
。文件系统数据将被批量读取并缓存在内存中用于某些操作(“core.fscache”
设置为“true”
)。 这提供了显著的性能提升。
第二个选项是“启用Git凭证管理器”
。Windows
的Git
凭证管理器为Windows
提供安全的Git
凭证存储,最显着的是对Visual Studio Team Services
和GitHub
的多因素身份验证支持。 (需要.NET Framework v4.5.1
或更高版本)。
第三个选项是“启用符号链接”
。启用符号链接(需要SeCreateSymbolicLink
权限)。请注意,现有存储库不受此设置的影响。
我勾选默认的第一、第二选项,
点击“Next”
按钮继续到下图的界面:
配置实验选项
这个界面是配置实验选项。
启用实验性的内置添加-i / -p
。(新!)使用实验性的内置交互式add
(“git add -i”
或“git add -p”
)。这使其速度更快(尤其是启动!),但尚未被认为是可靠的。
默认不勾选
直接点击“Next”
按钮继续到下图的安装进度界面:
安装进度指示
安装进度结束之后,会出现下图的完成Git
安装向导界面:
安装完成
在这个界面,可以勾选是否启动启动Git Bash
和是否查看发行说明,然后点“Finish”
按钮退出安装界面。
启动测试
到此,Git
的安装完成,可以在开始菜单中看到Git的三个启动图标(Git Bash
、Git CMD(Deprecated)
、Git GUI
)。
Git Bash
,是Git
配套的一个控制台,点击打开如下图:
Git CMD(Deprecated)
,是通过CMD
使用Git
(不推荐使用),点击打开如下图:
Git GUI
,是Git
的可视化操作工具,点击打开如下图:
4.2 mac
下载无选项,直接安装即可,也可通过命令行进行安装
brew install git
5. 简单的命令-入门运用
5.1 git init
git init
初始化创建仓库
会常见出一个隐藏的.git
文件夹,所有的操作历史将存入这里
在windows
下查看隐藏文件
在mac
下 需要shift+command+.
显示隐藏文件夹
注意:git不光可以管理项目的文件,所有类型的文件都可以被管理。
5.2 git status
git status
查看当前仓库所在目录的文件状态
Untracked
=> 未追踪的
当前的文件没有被git
追踪,即当前文件没有被git
记录。
注意:如果编辑命令的时候忘了单词,可以用tab键
,系统自动提示。
5.3 git add filename
git add filename
使文件加入追踪
Changes to be committed
改变成可被提交的状态了
git add .
将当前文件夹中的文件都加入追踪状态
5.4 git commit
git commit
提交(并且附带:对此次操作的描述信息)
(由于小迪的电脑已经配置过了,就懒得再重弄了,但显示如下)
每次提交必须要记录,姓名和邮箱,通过这种方式,能快速找到是由谁来提交的。
git config --globe user.email “xxx@example.com”
--globe
代表全局设置,即设置一次就够了。
git config --globe user.name “张三”
git config --global -l
这时候就打开了,小迪配置好的默认编辑器vs code
,默认是vim
(对中文支持不太友好,容易乱码)
修改默认编辑器:
git config core.editor notepad
git config --global core.editor "code -w" # 设置vscode
可以在编辑器里添加描述:
注意:#
代表注释,我们千万别把记录写在这里面,该文件下面的注释,只是提示给用户看的!
新建了1个1.txt文件
# 6. Please enter the commit message for your changes. Lines starting
# 7. with '#' will be ignored, and an empty message aborts the commit.
#
# 8. On branch master
#
# 9. Initial commit
#
# 10. Changes to be committed:
# new file: 1.txt
#
再去查看状态,没有任何可提交了。
10.1 git log
git log
查看提交记录
我们可以修改1.txt
内容:
注意:养成好习惯,不管做什么操作,都git status
一下,看下状态
我们发现文件状态又变化了:
modified
:已修改的状态。
对于当前的文件,git
进行了追踪,追踪后对比记录发现文件与之前不一样了,git
就认为文件被修改了。
我们输入git commit
,发现并没有运行成功。
Changes not staged for commit
未准备提交的更改
此时需要先git add filename
,使文件加入追踪
git log
为什么明明已经追踪过的文件,修改完后还需要git add filename
,使文件加入追踪?
10.2 补充:默认编辑器vim基本使用
10.2.1 输入
我们刚打开文件进入的界面是不能直接编辑文件的,因为我们处于normal
模式下,而要输入的话,需要进入insert
模式,才能进行编辑了。摁下 i
键,进入insert
模式而当我们编辑完之后,摁下esc
键,就可以回到normal
模式了。
在这我们介绍一下
vim
的模式,主要有3种,normal mode
/insert mode
/visual mode
。normal
模式是我们默认处在的模式,主要是我们输入命令,对文本进行操作的。而insert
模式,这是像我们一般的编辑器一样,输入。
而且当我们进入
insert
模式后,做完一些操作,最好键入esc
命令,回到normal
模式,至于原因,我们后面会看到的
还有其他的命令,这里不多言了。
命令 | 作用 |
---|---|
o | 在下方新开一行,并进入insert 模式 |
O | 在下方新开一行,并进入insert 模式 |
a | 在光标后一个字符开始编辑 |
A | 在光标所在行行尾开始编辑 |
I | 在光标所在行开头开始编辑 |
10.2.2 移动
vim
是不能用鼠标操作的(此处说的是原生版本),我们要移动光标的话,似乎只能用方向键了。但是方向键经常比较难摸到,就比较麻烦了。
所以,我们下面介绍一些更好的vim
移动方式。
注意:移动部分的命令都是在
normal
模式输入。
- j、k、h、l
命令 | 作用 |
---|---|
j | 光标向下移动一行 |
k | 光标向上移动一行 |
h | 光标向左移动一行 |
l | 光标向右移动一行 |
而且这几个键在我们右手的键位上,很方便就可以摁到。但是,h
和l
不建议常用,因为移动效率太低了,每摁一下就移动一格。我们下面介绍更便捷的移动操作。
w、e、b
命令 | 作用 |
---|---|
w | 向后移动一个单词,从词头到词头 |
e | 向后移动一个单词,从词尾到词尾 |
b | 向前移动一个单词,从词头到词头 |
这种以单词为单位的移动,要比h\l
那种以一格为单位的移动快很多,而且有效率。而且h/l
是无法跨行的,也就是当我们用摁h
键,移动光标到行首时,光标是无法移动到上一行尾的,而b
键可以。
Ctrl+d、Ctrl+u
上面讲的是单词的移动,但是如果在我们看文章或代码时,用的更多的是翻页,j
和k
键每次只能移动一行,是无法满足我们的需求的。下面就讲到翻页了。
命令 | 作用 |
---|---|
Ctrl+d | 向下翻半页 |
Ctrl+u | 向上翻半页 |
而且是每次翻半页,不用担心一翻页,就不用担心找不到之前看到哪了。
gg 、G
上下翻页固然很方便,但是我们经常看文档或写文档时,会想要跳回文章的开始部分。这个时候,如果文章很长,那么用翻页回去就太累了。vim
这么可以这么不方便呢,hhhh。所以,我们是有一个回到顶部按钮的,那就是gg
。而跳到文章尾部,则是G
。
10.2.3 退出
摁下esc
键,就可以回到normal
模式了,输入:wq
即可退出。如果提示没有文件名,则输入:wq filename
。w
代表保存文件,q
代表退出。所以,当你如果进入vim
时,没有指定文件名时,vim
会在你退出保存时提示你加上一个文件名(上面那个filename
只是代表文件名)。或者可以不保存,输入:q!
强制退出。
11. git add到底做了啥?
git add
在刚刚我们提过,它是添加一个文件,让git
对它进行追踪,那为什么追踪之后,我们再次提交的时候,还需要git add
呢?add
操作到底做了什么?
11.1 文件的三种状态
已修改、已暂存、已提交
它们分别对应的用途如图所示:
- 已修改:被修改的文件
- 已暂存:等待被提交的文件
- 已提交:提交到本地仓库的文件
注意:未被git追踪的文件不参与以下三种状态,称之为未追踪状态:Untracked
11.1.1 已暂存(stage)
之前我们输入git commit
,发现并没有运行成功。
Changes not staged for commit
未准备提交的更改,到底是什么意思呢?
11.2 工作区域
工作目录、暂存区域、Git仓库
11.3 git工作流
工作目录中修改或创建文件都在工作目录中,如果想把修改记录到git
仓库中,必须首先经过的就是暂存区域,之后进入了暂存区域,才能提交到git
仓库里。
- 在工作目录中修改文件
- 暂存文件
- 提交更新、找到暂存文件
11.3.1 基本工作流程小结
git仓库 | 暂存区 | 工作目录 |
---|---|---|
用于存放提交记录 | 临时存放被修改文件 | 被Git管理的项目目录 |
12. git 使用小结
12.1 Git 使用前配置
在使用 git
前,需要告诉 git
你是谁,在向 git
仓库中提交时需要用到。
- 配置提交人姓名:
git config --global user.name 提交人姓名
- 配置提交人姓名:
git config --global user.email 提交人邮箱
- 查看
git
配置信息:git config --list
也可直接在计算机的中配置文档中手动修改:
C:\Users\Administrator
注意
- 如果要对配置信息进行修改,重复上述命令即可。
- 配置只需要执行一次。
12.2 提交步骤
git init
初始化git
仓库git status
查看文件状态git add 文件列表
追踪文件git commit -m 提交信息
向仓库中提交代码git log
查看提交记录
12.3 撤销(恢复记录)
-
用暂存区中的文件覆盖工作目录中的文件:
git checkout 文件
-
比如在开发项目中的某个功能,功能开发一半的时候,将工作区的文件添加到了暂存区中。然后回到工作目录中继续开发,过了一会发现,后来开发的代码存在问题。需要将代码恢复到功能开发一半时的状态,这个时候如何恢复呢?就可以利用暂存区中的文件覆盖工作目录中的文件的方式了。
我们再修改其内容,但是此时假如发现有问题,需要回退之前暂存区的代码。
git checkout 1.txt
再打开文件夹,就恢复到之前的状态了。
-
-
将文件从暂存区中删除:
git rm --cached 文件
-
将 git 仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录:
git rest --hard commitID
13. 扩展
13.1 cmd 命令
# 14. 打开某一个盘面,如C盘
C:
# 15. 打开文件夹
cd 文件夹路径
# 16. 清空操作界面
cls
# 17. 新建一个文件
New-Item a.txt
New-Item mytest.txt -Type file
# 18. 新建一个文件夹
mkdir 新建文件夹
18.1 git命令
18.1.1 当需要添加暂存区的文件过多的时候
gir add .
添加所有改动文件及未追踪的文件
18.1.2 每次进入vim模式(git编辑器)输入描述很费劲
git commit -m ‘描述’
合并提交和描述操作,一步完成操作
18.1.3 每次提交都要输入add命令很麻烦
git commit -a -m ‘描述’
从工作目录提交到暂存区后,直接提交(仅限git
管理的文件,未追踪的无法执行该命令)
-a
就相当于 git add .
假如修改一下文件内容:
但是假如我们添加一个文件,再用此种方式提交发现出问题了!
注意:只要该文件是未被追踪的,就说明一件事情,git根本不会对它进行管理。从而就没有提交这种说法了。即git会完全无视它,提交命令也没有用。因此如果是未追踪的文件是不能省略步骤的,还是得一步步来。
18.2 中文乱码
-
文件名乱码
git config --global core.quotepath false
-
编辑描述乱码
- 进入
setting
- 找到
environment
- 添加:
set LANG=zh_CN.UTF-8
- 进入
win10操作系统,还是推荐大家使用terminal吧!cmder我用了很多办法,也没解决中文乱码的问题。
(后续待补充)