# 代码管理相关技术点 ## Git ### 1.Git的概念 **Git** 是**分布式版本控制系统**的核心工具,用于**追踪文件变更、协调多人协作、保存代码历史快照**。 Git是目前世界上最先进的分布式版本控制系统,在处理各种项目时都十分高效,而且非常的高大上。 作为一个分布式版本控制系统来说,Git是没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。例如我们一个小团队合作开发一个项目,我们可以先建立一个远程仓库,需求分析,搭建大体框架,将项目框架上传至远程仓库,队员可以git clone项目,各自完成自己负责的部分,完善项目等,写好之后还可以比对之前的版本,本地项目写好之后上传至远程仓库,出现错误还可以版本回退等等。 ### 2.三个区域的概念 在 Git 中,**三个核心区域**构成了版本控制的核心框架,它们协同工作以实现精确的变更管理。 #### 2.1工作区 **定位**:本地磁盘可见的代码目录。 **本质**:开发者的实施编辑沙盒。 **特点**:所有的文件修改都在此处,状态通过git status查看。 #### 2.2暂存区 **定位**:git目录下的二进制索引文件。 **本质**:提交前的精准快速缓存区。 **特点**:解决了提交半成品代码的痛点。 #### 2.3本地仓库 **定位**:项目根目录下的.git隐藏文件夹。 **本质**:版本数据库,用来存储提交历史。 ### 3.仓库的概念 Git 仓库(Repository)是 Git 版本控制系统的核心概念,用于存储项目文件及其完整版本历史。 仓库类型包括了本地仓库和远程仓库两种。 ### 4.节点的概念 Git中的**节点**是版本控制的基础,通过提交对象记录项目状态,结合分支和HEAD指针实现高效的代码管理与协作。 节点的本质是**提交对象**,是版本的核心**控制单元**。 节点的组成有以下几部分: 1.**树对象**:指向当前快照的目录结构,记录文件的名称、权限和内容。 2.**父节点**:首次提交没有父节点,普通提交有一个,合并提交会有多个。 3.**元数据**:主要用来记录作者、提交者、时间戳和内容。 ### 5.分支的概念 在Git中,**分支(Branch)** 是 **指向提交节点(Commit)的轻量级指针**,用于标记和管理不同的开发线路。其核心作用是允许开发者在并行线程中工作,而不会相互干扰。 ## Source tree ### 1.Source tree的概念 Sourcetree 是一款由 Atlassian 开发的免费图形化版本控制客户端,主要用于管理 Git 和 Mercurial(Hg) 代码仓库。它通过直观的界面简化了版本控制操作。 ### 1.仓库相关操作 #### 1.1创建本地仓库 1. 本地建立工作文件夹workpace,并添加1.txt,增加内容为11。(如下图1所示) 2. 打开sourcetree,选择上方加号,选择Create,目标路径选择刚刚建立的文件夹路径,点击创建。即可生成本地仓库。(如下图2、3所示)![image-20250716164410111](./Pictures/image-20250716164410111.png) ![image-20250716165057657](./Pictures/image-20250716165057657.png) ![image-20250716165118877](./Pictures/image-20250716165118877.png) #### 1.2打开本地仓库 1. 选择软件上方菜单栏的加号,页面打开后,选择local本地仓库,即可看到本地所有仓库。(如下图1所示) 2. 选择想要打开的本地仓库,双击即可打开。(如下图2、3所示) ![image-20250716165453793](./Pictures/image-20250716165453793.png) ![image-20250716165617049](./Pictures/image-20250716165617049.png) ![image-20250716165645482](./Pictures/image-20250716165645482.png) #### 1.3克隆远程仓库 1. 选择软件上方菜单栏的加号,页面打开后,选择clone,即可看到克隆仓库。(如下图1所示) 2. 打开远程仓库,找到远程仓库的路径,选择复制。(如下图2所示) 3. 将复制的链接,粘贴到克隆界面的源路径,同时选择本地文件的路径,选择克隆即可。(如下图3所示) 4. 打开文件夹,即可发现远程仓库内容被克隆到本地。(如下图4、5所示) ![image-20250716165820287](./Pictures/image-20250716165820287.png) ![image-20250716170022865](./Pictures/image-20250716170022865.png) ![image-20250716170247654](./Pictures/image-20250716170247654.png) ![image-20250716170317679](./Pictures/image-20250716170317679.png) ![image-20250716170352320](./Pictures/image-20250716170352320.png) #### 1.4关联远程仓库 1. 打开本地仓库界面,选择右上角设置(如下图1所示),出现远程设置(如下图2所示),点击下方添加按钮。 2. 打开界面后,将远程仓库的链接添加到路径,同时对该远程仓库进行命名。(如下图3所示) 3. 点击确定,即可将本地仓库与远程仓库进行关联。(如下图4所示) ![image-20250716170805020](./Pictures/image-20250716170805020.png) ![image-20250716170855682](./Pictures/image-20250716170855682.png) ![image-20250716170941689](./Pictures/image-20250716170941689.png) ![image-20250716173143565](./Pictures/image-20250716173143565.png) #### 1.5获取 1. 选择软件上方菜单栏的获取功能(如下图1所示),弹出获取窗口。(如下图2所示) 2. 点击确定,接口将远程仓库的更新获取到本地仓库中。(如下图3、4所示) ![image-20250716173348957](./Pictures/image-20250716173348957.png) ![image-20250716173441165](./Pictures/image-20250716173441165.png) ![image-20250716173550201](./Pictures/image-20250716173550201.png) ![image-20250716173607795](./Pictures/image-20250716173607795.png) **获取远程仓库时选项介绍:** * **从全部远端获取更新:**同时更新所有已配置的远程仓库。 * **删掉所有远端现已不存在的分支:**清理本地过期的远程分支引用。 * **获取所有标签:**同步远程仓库的所有标签。 ### 2.节点相关操作 #### 2.1提交 当本地仓库变动时,文件状态部分会显示需要提交,提交时应当补充变动内容或者能让自己看懂的语句,提交后,可在提交历史查看。 image-20250708161149061 #### 2.2 重置¥ 重置是将本此更改内容取消的操作,本地修改过后,如果在软件的本地仓库内选择重置,则会对本地文件进行版本回退,回到修改前的版本。 image-20250708161204838 #### 2.3回滚提交¥ 在提交历史中选择需要回退到的版本,选择回滚提交,则会将版本回退到想要返回的版本。 image-20250708161218765 ### 3.分支相关操作 #### 3.1新建分支 对当前仓库想要进行其他操作,经常采用新建分支,新建分支可以在软件上面菜单栏点击创建,可以选择工作副本或者是新文件进行管理。 image-20250708161231708 如果选择新建本地分支并对远程分支进行跟踪,可以选择在远程文件中检出新分支到本地。 ![image-20250716161350905](./Pictures/image-20250716161350905.png) #### 3.2合并分支¥ 合并分支指将多个分支进行统一,或者将分支的内容同步至其他分支。 合并分为平行合并和变基合并,平行合并会将分支的内容一次性挪到主干,变基合并会将分支的提交一个一个合并到主干。 **软合并**:将问题放到暂存区。 **混合合并**:若是分支领先,则直接提交,如果出现分叉,则会进行合并提交。 **强制合并**:强制生成合并提交。 image-20250708161247753 激活master,选择要合并的支线,点击确定,将支线的所有变化的节点打包创建一个新节点合并过去。 1. 切换到**目标分支**(如 `master`) 2. 点击上方菜单栏的:**分支 → 合并(Merge)** 3. 在弹窗中选择你要合并进来的源分支(如 `dev1`) 4. 点击“确定”开始合并 5. 如果有冲突,会提示你处理冲突 6. 处理完冲突后,**提交合并记录** #### 3.3删除分支¥ 右键选择分支,直接删除即可。 image-20250708161301912 删除分支时如果该分支没有备份,则会提示警告。可勾选强制删除进行删除。 ![image-20250715131516043](./Pictures/image-20250715131516043.png) #### 3.4切换分支¥ 直接左侧分支双击即可或者选择检出分支。 image-20250708161314068 #### 3.5制造冲突¥ 多个分支修改同一文件,同时将多分支进行合并时,会显示冲突。 ![image-20250715131629820](./Pictures/image-20250715131629820.png) #### 3.6解决冲突¥ 1. 可以手动确认选择,同时在提交时右键标记为已解决即可。 ![image-20250715132002916](./Pictures/image-20250715132002916.png) 2. 选择忽略。 解决冲突有以下几种解决方式 1. 使用版本解决冲突,选择使用我的版本或他人版本进行解决。 2. 通过手动更改本地文件进行解决。 #### 3.7拉取¥ 可以将他人传送到云端的内容拉取到自己的设备上面并合并。 image-20250708161333241 #### 3.8推送¥ 将本地内容推送到远程仓库。 image-20250708161414737 ### 4.其他 #### 4.1书写忽略文件¥ 文件夹内手动添加.gitignore 文件或者点击设置,选择忽略项,可以将不想让仓库追踪的文件写入里面。 ![image-20250715132116446](./Pictures/image-20250715132116446.png) **忽略文件主要有以下几种** 1. **忽略指定文件**:在 `.gitignore` 中添加精确文件名,如 `lalala.txt`,表示忽略该文件的所有更改。 2. **忽略特定类型的文件**:使用通配符后缀,如 `*.md` 表示忽略所有 `.md` 结尾的文件。 3. **忽略特定文件夹**:使用路径方式,如 `/name` 表示忽略项目根目录下的 `name` 文件夹及其所有内容。 #### 4.2停止跟踪¥ 停止跟踪(Stop Tracking)是指将文件从 Git 仓库的版本控制中移除,但不会删除本地文件。这意味着这些文件将不再被 Git 跟踪和管理,但它们仍然保留在你的本地文件系统中。 ![image-20250715132242834](./Pictures/image-20250715132242834.png) 停止跟踪可以选择含有该文件的提交节点,点击上方操作,选择停止跟踪。 也可以在提交时右键提交文件,选择移除。 #### 4.3创建补丁¥ 提交列表中找到想要创建补丁的提交,右键即可创建补丁。 补丁(Patch)在软件开发中是一个记录代码变更的文本文件,它本质上是两个代码版本之间的差异(diff)。它的核心作用是精确、轻量地传递代码变更。 image-20250708161435985 **应用补丁的四种情况**:¥ **1. 分支上的 `1.txt` 内容与补丁内容完全一致** - **表现**:补丁内容已经存在于文件中,Git 会检测到没有变化,通常补丁应用无效或跳过这部分,不会重复添加。 - **结果**:补丁不产生新改动,应用成功但无实际更改。 **2. 分支上的 `1.txt` 是空文件** - **表现**:补丁中添加的内容(`+1`)会被完整地添加到空文件中。 - **结果**:文件由空变成包含补丁内容,补丁完全应用成功。 **3. 分支上的 `1.txt` 内容与补丁内容部分一致** - **表现**:补丁中新增的内容与已有部分有重叠,Git 会尝试合并,可能成功应用新增部分,或者产生冲突需要手动解决。 - **结果**:补丁部分应用成功,冲突部分需人工介入。 **4. 分支中没有 `1.txt` 文件** - **表现**:如果补丁涉及新增文件,Git 会直接创建 `1.txt` 并写入补丁内容;如果补丁只修改文件而文件不存在,则应用失败报错。 - 结果: - 补丁新增文件时,文件被创建且内容写入。 - 补丁修改文件但文件缺失时,补丁应用失败。 #### 4.4删除补丁 选择补丁文件,直接右键删除即可。 #### 4.5贮藏¥ 临时保存未提交的本地修改,让工作区恢复干净。但注意,应添加描述。 ![image-20250711130022399](./../IAR/Pictures/image-20250711130022399.png) 贮藏可以选择暂存器文件,也可以选择非暂存区的文件进行贮藏。 #### 4.6丢弃¥ 删除未提交的本地修改。 image-20250711130039902 丢弃操作只能对本地已包括的文件的更新内容进行丢弃,对于新添加的文件,因为不包含在我们的本地仓库中,无法进行丢弃操作。 (途中丢弃操作灰色,将其添加到暂存区时,可以丢弃,但是丢弃的只是提交这个操作) ![image-20250716161244066](./Pictures/image-20250716161244066.png) #### 4.7创建标签¥ 标记提交。 image-20250708161540040 标签单击表示跳转到标签节点,双击表示当前资源管理器显示打了标签时的节点的内容。 #### 4.8删除标签 右键删除标签即可。 ![image-20250716161506019](./Pictures/image-20250716161506019.png) #### 4.9检出节点 检出节点可以分为检出本地分支和远程仓库分支 1. 检出本地分支时,会将本地文件跳转至检出的分支。 2. 检出远程分支,则是将远程分支的内容检出到新的本地分支或者已经存在的本地分支上。 ![image-20250715132747999](./Pictures/image-20250715132747999.png) #### 4.10停止跟踪远程分支 可以右键本地分支选择跟踪远程分支为无 ![image-20250715132733190](./Pictures/image-20250715132733190.png) #### 4.11新检出远程分支注意 当从远程分支上选择检出新分支前,应保证本地不存在不存在存在远程分支跟踪残留。 删除本地分支(已跟踪远程分支)后,想要重新检出该远程分支报错解决办法: 第一,打开资源管理器,选择``.git/refs/remotes/origin/``,找到存在的本地残留,进行删除。 第二,重新获取远程分支,然后选择检出远程分支即可。