202304《Git》学习笔记
狂神聊Git,B站,202304
目录
常用的Linux命令学习 [4](#常用的linux命令学习)
认识Git
版本控制
版本控制(Revision control)是一种软件工程技术,用于在开发过程中管理对文件、目录或工程等内容的修改历史,方便查看更改历史记录,也便于备份和恢复以前的版本。其作用包括:
- 实现跨区域多人协同开发;
- 追踪和记载一个或多个文件的历史记录;
- 组织和保护源代码和文档;
- 统计工作量;
- 支持并行开发,提高开发效率;
- 跟踪记录整个软件的开发过程;
- 减轻开发人员负担,节省时间,降低人为错误。
简单来说,版本控制是用于管理多人协同开发项目的技术。若没有进行版本控制,或版本控制缺乏正确流程管理,在软件开发过程中会引发诸多问题,如软件代码冗余、软件过程事务性、开发过程并发性、源代码安全性以及软件整合等方面的问题。无论是工作、学习还是个人笔记场景,都有使用版本控制工具的需求。
常见的版本控制工具
主流的版本控制器有:
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Microsoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
版本控制产品众多,如 Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serer、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault 等,其中影响力最大且使用最广泛的是 Git。
本地版本控制
集中式版本控制:版本数据保存在服务器中,SVN
分布式版本控制:Git,每个人都拥有全部的代码,不会因为服务器或网络问题造成无法工作
Git和SVN的区别
SVN
SVN(Subversion)是集中式版本控制系统 。其版本库集中存放在中央服务器,用户工作时,需先从中央服务器获取最新版本,完成工作后再推送回中央服务器。这种模式必须联网才能工作,对网络带宽要求较高 。若网络不佳,会影响操作效率,且一旦中央服务器故障或维护,用户可能无法正常进行版本控制操作。
Git
Git 是分布式版本控制系统,不存在中央服务器,每个用户的电脑都相当于一个完整的版本库 。工作时无需联网也可进行版本管理相关操作,如提交修改等。在协同工作场景下,若多人对同一文件进行修改,只需将各自修改推送给对方就能相互查看变更。这种分布式架构增强了数据安全性(多份完整版本库备份),也提高了工作灵活性和效率 。Git 因其先进特性,成为目前广泛应用的版本控制系统 。
Git可以直接看到修改了哪些代码
Git是目前世界上最先进的分布式版本控制工具
聊聊Git历史
Git 的起源与特点
Git 是免费、开源的分布式版本控制系统,最初是为辅助 Linux 内核开发而创建,旨在替代 BitKeeper 。它诞生于一个充满纷争与创新的年代。
在 1991 - 2002 年间,Linux 内核开源项目参与者众多,内核维护工作很大程度上耗费在提交补丁和保存归档等繁琐事务上。2002 年,项目组开始启用专有分布式版本控制系统 BitKeeper 来管理和维护代码。然而到了 2005 年,开发 BitKeeper 的商业公司结束了与 Linux 内核开源社区的合作,收回了社区免费使用 BitKeeper 的权限。这一事件促使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds )基于使用 BitKeeper 时积累的经验教训,开发出了 Git。
Git 之父
Linus Benedict Torvalds(李纳斯・托沃兹 )于 1969 年出生在芬兰,他不仅是 Linux 操作系统的缔造者,也被称为 Git 之父 。在操作系统和版本控制系统的发展进程中,他发挥了至关重要的作用,推动了开源社区及软件开发协作模式的发展。如今,Git 已成为世界上最先进的分布式版本控制系统。
Git环境配置
所有东西下载慢的话可以去找镜像下载
https://npm.taobao.org/mirrors/git-for-windows/
常用的Linux命令学习
cd:用于改变目录。cd..可回退到上一个目录,直接使用cd可进入默认目录。pwd:显示当前所在的目录路径。ls和ll:均用于列出当前目录中的所有文件,其中ll(两个l)列出的内容更为详细。touch:用于新建一个文件,例如touch index.js会在当前目录下新建一个index.js文件。rm:用于删除一个文件,如rm index.js会删除index.js文件 。mkdir:用于新建一个目录,即新建一个文件夹。rm -r:用于删除一个文件夹,例如rm -r src可删除src目录。mv:用于移动文件,如mv index.html src(前提是文件和目标文件夹在同一目录下 ),index.html是要移动的文件,src是目标文件夹。reset:用于重新初始化终端 / 清屏。clear:用于清屏。history:用于查看命令历史。help:提供帮助信息。exit:用于退出。#:在命令行中表示注释 。
Git基本理论
这是核心知识,所有实践均源于此
工作区域
Git 的工作区域分为本地和远程两部分,本地有三个工作区域,加上远程的 git 仓库共四个工作区域,各区域及其转换关系如下:
工作区域介绍
- Workspace(工作区):是平时存放项目代码的地方。
- Index / Stage(暂存区):用于临时存放改动,本质是一个文件,保存即将提交的文件列表信息。
- Repository(仓库区 / 本地仓库):安全存放数据的位置,存储了提交的所有版本的数据,其中 HEAD 指向最新放入仓库的版本。
- Remote Directory(远程仓库):位于远程服务器上,用于团队协作、数据备份等。

Remote,远程仓库:托管代码的服务器,GitHub,Gitee
{width="5.768055555555556in"
height="3.8293482064741906in"}
- Directory(目录 / 仓库):指使用 Git 管理的一个目录,它既包含用户的工作空间,也有 Git 自身的管理空间。
- WorkSpace(工作区):是需要通过 Git 进行版本控制的目录和文件集合,这些目录与文件共同构成了工作空间。
- .git:这是存放 Git 管理信息的目录,在初始化仓库时会自动创建。
- Index/Stage(暂存区):也叫待提交更新区,在将更改提交到仓库(repo)之前,可将所有更新暂存于此。
- Local Repo(本地仓库):是存放在本地的版本库,其中 HEAD 指针指向当前的开发分支(branch)。
- Stash(隐藏):是一个工作状态保存栈,用于保存和恢复 WorkSpace 中的临时状态。
工作流程
Git 的工作流程通常如下:
- 首先在工作目录中对文件进行添加或修改操作,例如对
UserMapper.xml文件进行相关变动。 - 接着,把需要纳入版本管理的文件放入暂存区域,使用命令
git add.可将工作目录下所有变动文件添加到暂存区。 - 最后,将暂存区域的文件提交到 Git 仓库,执行
git commit命令完成提交操作。
在 Git 管理体系下,文件存在三种状态:已修改(modified),即文件在工作目录中被改动但未放入暂存区;已暂存(staged),表示文件已被放入暂存区等待提交;已提交(committed),意味着文件已成功提交到 Git 仓库 。
{width="5.768055555555556in"
height="4.3781146106736655in"}
Git项目搭建
创建工作目录与常用指令
{width="5.768055555555556in"
height="2.2438003062117233in"}
本地仓库搭建
创建本地仓库有两种方式:
创建全新仓库
在需要使用 Git 管理的项目根目录下,执行命令 git init ,即可在当前目录新建一个 Git 代码库。执行该命令后,项目目录中会新增一个 .git 目录,此目录存储着关于版本等的所有信息。
克隆远程仓库到本地
另一种创建本地仓库的方式是克隆远程目录,此操作会将远程服务器上的仓库完整镜像到本地。使用命令 git clone [url] ,其中 [url] 为远程仓库的地址,该命令可克隆一个项目及其完整的代码历史(版本信息)。可以前往 Gitee 或 GitHub 等代码托管平台,选择仓库进行克隆测试。
Git文件操作
文件4种状态
版本控制是对文件版本的管控,在对文件进行修改、提交等操作前,需明确文件当前状态,避免误提交或漏提交。以下是文件在 Git 中的几种状态及转换:
- Untracked(未跟踪):文件存在于文件夹中,但未加入 Git 库,不参与版本控制。使用
git add命令可使其状态变为Staged(暂存) 。 - Unmodify(未修改):文件已在版本库中且未被改动,即版本库中的文件快照与文件夹中的内容一致。若该文件被修改,状态变为
Modified(已修改) ;若使用git rm命令将其移出版本库,则变为Untracked文件 。 - Modified(已修改):文件已被修改,尚未执行其他操作。通过
git add可使其进入暂存(Staged)状态 ;使用git checkout可丢弃修改,回到unmodify状态,该命令会从库中取出文件覆盖当前修改 。 - Staged(暂存):处于暂存状态。执行
git commit可将修改同步到库中,此时库中的文件与本地文件一致,文件变为Unmodify状态 ;执行git reset HEAD filename可取消暂存,文件状态变为Modified。
查看文件状态
上面的4种状态,可以通过以下命令查看
查看指定文件状态
Git status [filename]
查看所有文件状态
Git status
添加所有文件到暂存区
Git add .
提交暂存区的内容到本地仓库
Git commit --m "消息内容" -m是提交信息
忽略文件
在使用 Git 进行版本控制时,有时不想将某些文件纳入其中,如数据库文件、临时文件、设计文件等。此时可在项目主目录下创建 .gitignore 文件,通过其规则来指定被忽略的文件或目录 。规则如下:
- 注释与空行:文件中的空行或以井号(#)开始的行是注释,会被忽略。
- 通配符使用:可借助 Linux 通配符。星号(*)匹配任意多个字符;问号(?)匹配一个字符;方括号([abc])表示可选字符范围;大括号({string1,string2,...})代表可选字符串 。
- 例外规则:名称最前面有感叹号(!)表示例外,该文件或目录不被忽略 。
- 目录指定:名称最前面是路径分隔符(/),表示仅忽略此目录下的文件,子目录中的文件不受影响 。
- 子目录忽略:名称最后面是路径分隔符(/),表示忽略此目录下同名的子目录,文件不受影响(默认文件和目录都忽略 )。
常见示例有:
*.txt:忽略所有.txt结尾的文件。!lib.txt:但lib.txt除外。/temp:仅忽略项目根目录下的temp文件,不包括其他目录下的temp。build/:忽略build/目录下的所有文件。doc/*.txt:会忽略doc/notes.txt,但不包括doc/server/arch.txt。
另外,在 Java 项目中,常见的被忽略内容如:
- 编译生成文件:
*.class、*.log、*.lock。 - 打包文件:
*.jar、*.war、*.ear,以及target/目录 。 - IDE 相关:
.idea/、*.iml,还有与特定 IDE 如 STS、IntelliJ IDEA 相关的配置文件(.apt_generated、.factorypath、.springBeans、*.ipr、*.iws) 。
使用码云
github有墙,比较慢,在国内一般使用gitee。在公司内部有时会搭建自己的gitlab服务器
以下是在码云平台进行相关操作的步骤:
- 注册与信息完善:在码云平台进行注册并登录,完善个人信息。
- SSH 公钥设置:在本机进入
C:\Users\Administrator\.ssh目录(不同系统路径可能有差异 ),执行ssh-keygen命令生成公钥,实现免密码登录。 - 公钥添加:将生成的公钥信息(public key)添加到码云账户中。
- 仓库创建:使用码云创建属于自己的代码仓库。
设置本机绑定ssh公钥,免密码登录。这一步挺重要的,码云是远程仓库,我们平时工作在本地仓库
Ssh-keygen --t rsa
然后会生成2个文件
{width="5.768055555555556in"
height="4.121089238845144in"}
许可证:开源是否可以随意转载,开源但不能商业使用
IDEA中集成Git
1.新建项目,绑定git
将远程的git文件目录拷贝到项目中即可
2.修改文件,使用IDEA操作git
-
添加到暂存区
-
commit提交
-
push到远程仓库
3.提交仓库
以上都是单个人的操作
{width="5.768055555555556in"
height="1.8492497812773403in"}