写在前面:在工程实践中,因为涉及多个部门之间的协同工作,笔者不得不改掉之前的开发习惯,用git进行相应的上库操作。在此期间踩坑无数,现将近段时间的学习心得整理,希望能对git初学者起到帮助。文中内容有不妥之处,还望交流指正
了解Git
一、初识Git
1)什么是git
git是一种**分布式**版本控制系统,用于开发人员对版本的修改和维护,相较于对文件的**直接修改**——**另存为/保存**的操作,git有其优越性:保存各个版本的**快照**,且有相应的代码可以进行维护,方便开发人员了解各个版本的**修改内容**及其**特性**。
与**分布式**版本控制系统相对的,是**集中式**版本控制系统,在此通过两个文本文档间内容对比的例子来简述其异同,如下:
Hello World
Hello Wuhan
在上述两个代码中,此次的修改点其实是World --> Wuhan ,相较于论文的修改采用批注的方式,git中有指令能帮我们很好的分析修改的具体位置:**git diff**
执行后在git的窗口,会以上图的形式显示,其中**---**表示删除的内容,**+++**表示增加的内容,在工程文件中,相应的指令能帮我们很快定位到修改的地方,使我们的维护和更新更加稳定
如上图,我们能获得**修改前**和**修改后**的内容**差异**,而**集中式**版本控制系统则做不到这一点,集中式版本控制系统保存的仅是每个版本的修改点,这导致了若中途的版本出现问题,可能会导致最终的版本与我们想实现的功能相差甚远,甚至会有意料之外的报错。这是我们不希望看到的,所以多数情况下还是推荐使用**git**这种**分布式**版本控制系统
2)如何配置git
配置**git**可以在官网进行下载:Git - 安装 Git (git-scm.com)
CSDN上也有很多相关内容的博客,可以根据自己的实际需求,选择相应的版本进行下载,此处不多赘述
下载完后可进行如下配置:
初始的两行代码**git config**起到的作用是标识当前的使用用户,这在之后的提交中尤为重要,方便组内其它人员了解**何人**在何时提交了新的版本,便于维护时的**溯源**
** 语法参考:git config --global user.name "你的用户名"**
** git config --global user,email "你的邮箱"**
** 第三行代码的作用是将文本换行符CRLF** -> **LF **的一个转换
第四行代码的作用是识别中文路径,将上述理解为初始环境配置即可
3)生成你的SSH Key
** 在GitHub的提交中,有http协议和SSH两种,其中SSH稳定性更强,所以在拉代码的过程中多采用SSH**协议,使用协议前需生成自己的公钥,在文本框中输入下列内容即可生成自己的公钥:
即 **ssh-keygen -t rsa -C 你的邮箱**
** 回车后输入yes然后一直回车即可,观察图片的倒数第二行可以看见给了我们生成的公钥文件路径,我们可以采用cat命令查看该文件的内容**:
参考语法:**cat 上方路径**
** 从ssh开头到邮箱结尾的这部分内容即是生成的公钥**了
**4)公钥添加**
** 由于笔者使用的是github,此处展示github上的公钥**添加,其它平台上应该也是一致的
在**github**右上角点击头像会出现**settings**选项,点击**settings**进入设置页面
在设置页面左侧有**SSH Key**选项,点击后将刚刚获得的公钥粘贴进去后提交即可,**title**可采取**项目名_用户名**的形式命名,点击提交![](https://img-blog.csdnimg.cn/direct/d10ccb3520534b24a329feeb1c943567.png) 这样我们的公钥就与**GitHub**仓库绑定了
随后在个人界面,创造自己的**个人仓库**
进入仓库页面
![](https://img-blog.csdnimg.cn/direct/b922631b587a4ba8b0ee07f6d3e489fb.png)
此处的链接即是我们**克隆**项目时可使用的**链接**,方便我们与远端进行交互,将我们的代码提交到平台上
二、使用Git完成一次文件的下载与上传
1)了解修改流程
** pull和push是我们在工程中常用的做法,在第一次使用项目仓库的时候,我们会采取克隆的指令将仓库的代码拉到本地进行修改,这个过程涉及了两个部分的内容:对git语法的理解和对修改流程的熟悉**
** 笔者最初使用git**拉取代码时,重复了数十次才对完整的流程有了较浅的认知,在我看来,完整流程可分为如下几部分:
1.将代码克隆到本地仓库 ——获取源文件,在本地进行修改和查看
2.在本地仓库新建个人分支——与主干分支错开,避免直接修改主干分支导致的未知的错误,提交时也会在个人分支进行提交
3.对文件进行修改 ——包括但不限于**增加**文件/文件夹,**删除**文件/文件夹/文件内容,**修改**文件/文件夹/文件内容
4.对修改内容进行检视 ——检查修改的**文件**和**内容**,避免因为打错字符导致的版本**故障**
** 5.将修改内容添加到暂存区**
6.将修改内容提交——附带**message** 标明修改后的版本**特性**
7.检查提交的日志文件
8.将修改内容推送远端
**修改工作**进行的区域我们称之为**工作区**,将修改内容保存后**Git**会将文件放置到**暂存区**,此时还可进行**撤销**的操作,确认无误后可提交至**本地仓库**,才算是完成了**修改**
** 在这之后我们将本地的修改内容推送远端,实现在Github**上的更新
2)了解git语句
我始终是相信实操胜过一切理论,所以在此处进行一次完整的**下载上传**操作,方便直观的了解具体的**操作流程**
** 1.git init **
** git init进行的是初始化操作,用于在本地生成一个git仓库和.git目录**(隐藏文件,不要去修改其中内容),具体使用可如下:
此处解释几行语句的具体作用:
**-cd path/** 引导**git**进入具体的路径下
**-ls **查看当前路径下的所有文件
**-git init **初始化**Git**仓库
可以看出,执行了前三行语句后,第四行ls时,我们新增了文件夹MyProject,这就是我们**git**的**本地仓库**
** 2.git clone**
** 我们可以cd** 进该仓库并clone我们github平台上的链接,来进行修改维护工作
第二行语句就是我们的**clone**语句,具体语法如下:
**-git clone** 链接
**clone**中会要求输入**yes**,然后一直回车即可
**clone**完后**ls**,发现**本地仓库**已经有了**远端**的文件夹**First-Object**了,**cd**进文件夹
**3.git checkout -b**
** git checkout -b 在Git中起到的作用是新建分支并且切换自动切换到新生成的分支**上去,语法如下:
**-git checkout -b 新建的分支名 **新建分支后,后续的修改在分支上进行即可
**4.git status** 、**git diff**
** 因为clone的是空仓库,所以需要新建文件,此处使用touch**命令:
其中**touch**起到的是新建文件的作用,类似的命令还有**mkdir**,用于新建文件夹
第二行的**vim**是修改文件内容的命令,回车后会进入修改页面,按键盘上**i键**即可修改内容,修改后按**ESC**退出修改并输入此处双引号中内容 "**:wq**"即可保存修改并回退到**git命令界面**
** 修改后我们可以输入git status**命令查看修改的具体文件,如下图:
此处**回显**提示我们修改的文件是a.txt,且文件未被**跟踪**,可以把修改后的文件**add**进暂存区
**git diff**相较于**git status**,提供的是查看修改文件的内容的功能,在后文会附图
**5.git add、git commit**
** git add 可以将修改后的文件添加到暂存区**,方便之后的提交
具体语法如下:
**-git add path/文件名 **
** git commit的作用则是将暂存区的内容上传到本地仓库**,如下图:
具体语法如下:
**-git commit path/文件名 -m "新版本的特性内容" **其中**-m**意味着携带**message**,即在提交时附带上后方双引号中的内容,执行完**git commit**,文件才相当于在本地完成了修改
**5.git log**
** git log **提供的是查看日志的功能,根据git log 我们能看到在分支上的近几次提交及其内容,如下图:
其中会生成特定的**commit_id**,方便之后版本维护时的**溯源**,观察上图中的信息会发现,包含了**提交者**及其**邮箱**、**提交时间**还有最后的**message**——”Say Hello to the World“,这也是通过**git**管理版本的优越之处,通过查看日志可以了解不同提交者更新的**版本特性**,方便进行**维护修改**
** 6.git push**
** git push **提供的是推送远端的功能,通过git push 我们能将本地分支上的修改同步至服务器,从而实现同步的更新,如下图:
![](https://img-blog.csdnimg.cn/direct/1416cce6243c41a09b3afa998778c905.png)
观察上图可发现,**push**完后**GitHub仓库**中多了**a.txt**文件和我们的标识信息
**git push** 的具体语法如下:
**-git push origin 远端分支名**
** 可将远端分支名与本地分支名设置一致,这样之后进行pull**操作时也会较为方便
**push**完后为了展示**git diff**效果,对本地的**a.txt**文件进行了修改,修改后**git diff**如下图所示:
红字是**删除**部分,绿字是**增加**的部分,通过观察**diff**方便我们了解具体的修改内容,从而确定是否将这笔修改进行**提交**
** 知晓上述内容后,实现基本的拉代码——修改——上传远端的操作,应该是没有问题了。除开上述语法外还有git checkout 、git pull等语法暂未介绍,本文只作Git基础概念和语法**介绍,其它的语法将会在之后的更新中补上
版权归原作者 呆瓜程序员 所有, 如有侵权,请联系我们删除。