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