上一篇博客带大家下载,安装和配置好了Git,并且还复习了一些常用Linux命令的使用,今天来带大家学习一下Git的核心理论,如何克隆GitHub和Gitee上的开源项目,以及Git的一些常用基本命令的使用
Git的安装配置和简单使用的博客链接:https://blog.csdn.net/weixin_45301250/article/details/118835212?spm=1001.2014.3001.5501
Git本地有三个工作区域:工作目录 ( Woring Directory )、暂存区 ( Stage/Index )、资源库 ( Repository 或 Git Directory ),如果再加上远程的 git仓库 ( Remote Directory ) 就可以分为四个工作区域。
文件在这个四个区域之间的转换关系如下:
本地的三个区域确切的说应该是git仓库中HEAD指向的版本
ref: refs/heads/master # 指向master节点,也就是主分支
提示:如果还有远程仓库的话,还需要使用 git push 命令将本地仓库文件提交到远程仓库
git管理的文件有三种状态:已修改 ( modified )、已暂存 ( staged )、已提交 ( committed )
git的工作流程图如下:
工作目录 (Working Directory) 一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,但是建议不要有中文
日常使用只需要记住下图中的6个命令:
重点是push、commit和add三个命令的使用!
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库
创建全新的仓库,需要用Git管理的项目的根目录执行
# 在当前目录搭建一个git代码库 git init
结果:执行初始化后可以看到,在我们的项目目录gitcode中多出了一个.git目录,并且关于版本等的所有信息都在这个目录里面!
另一种方式是克隆远程仓库中的项目,其实就是将远程服务器上的仓库完全镜像一份到本地!
# 克隆一个项目和它的整个代码历史(版本信息) git clone [url] # url是指远程仓库的地址链接
GitHub:一个国外的代码托管平台,其他都很好,但由于是国外网站,所以访问速度会较慢
gitee:用于托管代码的的国内网站,推荐使用,访问速度会相对较快
我们可以去这两个网站上去克隆别人的开源项目到本地来!
下面是GitHub和gitee的网址链接:
GitHub官方网址:https://github.com/
gitee官方网址:https://gitee.com/
这里推荐使用gitee码云来克隆项目,因为是国内网站,克隆速度会相对较快!
这个项目我搭建了远程仓库,所以你们可以直接去我的仓库复制链接,仓库地址是:https://gitee.com/galloping-de-snail-rz/studentmanager
进入到仓库后,选择右上角的“克隆/下载”,复制HTTPS下的地址链接即可!
地址链接为:https://gitee.com/galloping-de-snail-rz/studentmanager.git
不推荐使用,克隆到本地网速会很慢,但如果你搭有梯子,可以使用GitHub
仓库地址为:https://github.com/Crazy-Creator102/studentmanager
和使用码云相同相同,选择Code下的HTTPS,直接复制地址即可!
地址链接为:https://github.com/Crazy-Creator102/studentmanager.git
# 从远程仓库克隆项目到gitcode目录下 git clone https://gitee.com/galloping-de-snail-rz/studentmanager.git
从码云上克隆的速度还是很快的,十几秒钟就下载完毕了!
到这里,我们就成功将gitee远程仓库的开源项目,克隆到本地来了!
版本控制就是对文件的版本控制,要对文件进行修改,提交等操作
首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上
也就是未跟踪状态,此文件在文件夹中,但并没有加入到git库,不参与版本控制;
通过使用 git add命令,将状态变为Staged (暂存状态)
例如:我们编写了一个hello.txt文件,本来处于Untracked (未跟踪) 状态,使用 git add hello.txt 命令,将其变为Staged (暂存) 状态
文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致;
这种类型的文件有两种去处:
如果它被修改了,则变为Modified (已修改) 状态;
如果使用 git rm移除版本库,则变为Untracked (未跟踪) 状态
文件已修改,仅仅是修改,并没有进行其他操作;
这个文件也有两个去处:
通过使用 git add 命令,可进入Staged (暂存) 状态
使用 git checkout 命令,则说明丢弃修改过,返回到Unmodify (未修改) 状态 (这个 git checkout,即从git库中取出文件,覆盖当前修改! )
上面提到文件有4种状态,通过如下命令我们可以查看到文件的状态
# 查看指定文件状态 git status [filename] # 查看所有文件状态 git status # 添加所有文件到暂存区("."表示当前目录下的所有文件) git add . # 提交暂存区中的内容到本地仓库 -m 提交消息 git commit -m "消息内容"
# 初始化git仓库,在gitcode目录下创建.git文件 git init # 记得首先在gitcode目录下创建一个测试文件,例如一个hello.txt文本文档 touch hello.txt # 查看所有gitcode目录下的所有文件的状态 git status
结果:初始化git仓库成功,但无法查看文件状态
分析:因为它提示gitcode目录下存在未跟踪文件hello.txt文本文档,因此要使用git add命令将hello.txt添加到暂存区
# 将hello.txt文本文档添加到暂存区("."表示gitcode目录下所有文件) git add . # 再次查看gitcode目录下所有文件状态 git status
结果:成功将hello.txt文件添加到暂存区,由Untrack (为跟踪) 状态变为Staged (暂存) 状态!
# 提交暂存区中的内容到本地仓库(-m表示提交的消息) git commit -m "new file hello.txt"
结果:将hello.txt文件成功同步到本地仓库!
# 再次查看hello.txt文件状态 git status
结果:可以看到 ”在master分支上,没有可以提交的,工作树已被清理“的提示信息,表示hello.txt文件已由Staged (暂存) 状态变为Unmodified (未修改) 状态!
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件和设计文件等
在主目录下建立“.gitignore”文件,此文件有如下规则:
#为注释 *.txt # 忽略所有.txt结尾的文件,这样的话上传就不会被选中! !lib.txt # 但lib.txt除外 /temp # 仅忽略项目根目录下的TODO文件,不包括其他目录temp(可以理解为往上忽略,就是除自己以外的都不上传了) build/ # 忽略build/目录下的所有文件 doc/*.txt # 会忽略doc/notes.txt ,但不包括 doc/sever/arch.txt
HELP.md # 针对所有项目中的忽略文件 # 忽略target目录下的所有文件 target/ # 但.mvn目录下的wrapper子目录下的maven-wrapper.jar文件除外 !.mvn/wrapper/maven-wrapper.jar # 但**/src/main/**/target/目录下的文件除外 !**/src/main/**/target/ # 但**/src/test/**/target/目录下的文件除外 !**/src/test/**/target/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### 针对IntelliJ IDEA的忽略文件 ### # 忽略.idea文件 .idea # 忽略.iws文件 *.iws # 忽略.iml文件 *.iml # 忽略.ipr文件 *.ipr ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ !**/src/main/**/build/ !**/src/test/**/build/ ### VS Code ### .vscode/
到这里,Git的基本理论和常用操作命令的使用就结束了,欢迎大家在评论区学习和讨论!
参考视频链接:https://www.bilibili.com/video/BV1FE411P7B3 (B站的UP主遇见狂神说的Git快速入门)