# mycangku **Repository Path**: my-tribe/mycangku ## Basic Information - **Project Name**: mycangku - **Description**: 12323234534546456575675 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-12-07 - **Last Updated**: 2023-03-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git:源代码版本控制管理 **工具** 对代码管理的一种工具。 ## 什么是版本控制? **版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。** ``` 通俗的讲,版本控制就是一种记录一个或者多个文件内容的变化,方便我们来查阅特定版本修订情况的系统。 ``` ### 为什么要使用版本控制系统? ``` 实际开发中,一个项目有多个人完成,每人分了几个功能,那么每天你开发的功能怎么管理? index文件:洪涛吃饭-- 开发人员:洪涛。(10个) 再加个功能:洪涛喝水--- 开发人员:高洁(30个功能) 新开发的代码,就要把之前功能不健全的代码给更新掉,这种就叫代码的管理。管理代码就要使用工具,而这个工具就叫做git。 [多人开发项目,是不是要将同一份代码进行合并],合并就要使用工具,工具就是git。 ``` 5个前端:共同开发一个项目。今天开发了一部分功能。 李乾:开发了一个龟兔赛跑。 佳澳:开发了一个兔子捡西瓜。组长。 佳澳 --- 李乾 qq发送:一个规范的公司,领导和同事会打死你。 ### 集中式版本控制系统 ​ 第二代版本控制系统被称为**集中式版本控制系统(Centralized Version Control Systems,CVCS)**,其对同步修改更加宽容,但有一个明显的限制,用户必须在允许提交之前将当前修订合并到他们的工作中。 ​ 集中化的版本控制系统诸如 CVS,svn 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到 这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。 ![](image/svn.png) 这种做法带来了许多好处,现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统; 要远比在各个客户端上维护本地数据库来得轻松容易。 ​ **事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。 如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。** ``` 并不是说服务器故障了就没有办法写代码了,只是在服务器故障的情况下,编写的代码是没有办法得到保障的.试想 svn 中央服务器挂机一天.你还拼命写了一天代码,其中 12 点之前的代码都是高质量可靠的,而且有很多闪光点.而 12 点之后的代码由于你想尝试一个比较大胆的想法,将代码改的面目全非了.这样下来你 12 点之前做的工作也都白费了 有记录的版本只能是 svn 服务器挂掉时保存的版本! 注: 单点故障(英语:single point of failure,缩写SPOF)是指系统中一点失效,就会让整个系统无法运作的部件,换句话说,单点故障即会整体故障。 ``` **要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被客户端偶然提取出来的保存在本地的某些快照数据就成了恢复数据的希望。但这样的话依然是个问题,你不能保证所有的数据都已经有人事先完整提取出来过。 只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。** ### 分布式版本控制系统 ​ 第三代版本控制系统被称为**分布式版本控制系统(Distributed Version Control Systems,DVCS)**,其允许合并和提交分开。在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用。 ​ 在这类系统中,像 Git,BitKeeper 等,**客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来**。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份(Git团队对代码做了极致的压缩 最终需要的实际空间比svn多不了太多)。 ![](image/git.png) **分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:** ​断网的情况下也可以进行开发(因为版本控制是在本地进行的) ​使用 github 进行团队协作,哪怕 github 挂了 每个客户端保存的也都是整个完整的项目(包含历史记录) ## 版本控制的总结 ### 集中式 svn ``` svn因为每次存的都是差异,需要的硬盘空间会相对的小一点,可是回滚的速度会很慢 优点: 代码存放在单一的服务器上 便于项目的管理 缺点: 服务器宕机: 员工写的代码得不到保障 服务器炸了: 整个项目的历史记录都会丢失 ``` ### 分布式 ``` git每次存的都是项目的完整快照 需要的硬盘空间会相对大一点(Git团队对代码做了极致的压缩 最终需要的实际空间比svn多不了太多 可是Git的回滚速度极快) 优点: 完全的分布式 缺点: 学习起来比SVN难 ``` ## git下载:https://git-scm.com/downloads ``` 如果下载比较慢,可以安装淘宝镜像:Windows淘宝镜像地址:http://npm.taobao.org/mirrors/git-for-windows/ ``` # git 一路默认安装即可。 ``` 注意,尽量将git的安装在 **没有空格或者特殊符号的目录** 下,避免后期与其他工具整合时候的一些不必要的麻烦。 ``` ## ### 配置内容 - 用户信息 ``` 第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录: 1、右键点击git bash ,会蹦出一个命令行的界面,然后开始配置。 2、git config --global user.name "你的姓名" 【用户名可以是中文也可以是英文】 3、git config --global user.email "你的邮箱" 【个人邮箱即可】 ``` ## 要检查已有的配置信息,可以使用 git config --list 命令 git config --list ## 删除配置信息 git config --global --unset user.email ### git的三大分区 > git三大分区的概念 ``` git本地数据管理可以分为三个区:工作区、暂存区、版本库 ``` ![](./image/git%E7%9A%84%E4%B8%89%E5%A4%A7%E5%88%86%E5%8C%BA.png) ### 工作区(Working Directory) ​ 直接编辑的地方,肉眼可见,直接操作。 ​ GitTest是我本地的一个仓库, 其中GitTest目录就是我们的工作区,但不包括.git这个目录 ### 暂存区/缓存区(Stage 或 Index) ​ 数据暂时存放的区域。 ​ 缓存区是一个看不见的区域,个人觉得这是Git的一个安全机制吧,就是说你提交代码的时候有可能会提交一些错误的代码,所以这个区域就是为了让你有机会反悔提交的代码。 ​ 在项目目录下使用指令“git add fileName”就可以把代码存入缓存区,这里的fileName是指的要往缓存区添加的文件名,当然也可以使用“.”代表当前的整个目录。 ​ “git status”可以查看缓存区有什么文件, ### 版本库(commit History) ​ 存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程git仓库了。 ​ 而.git这个目录就是本地仓库区,你commit的一切更改都会存储到本地仓库中 ### 远程仓库(remote) ​ 简单来说,就是我们工作过程中不能将主项目放到某一个人的本地电脑上,这时就需要有一个地方存储主项目,这个地方就是我们的git远程仓库,也可以叫做代码托管平台。 ### Git本地库与远程库 - git本地库,适合个人在本地使用版本管理工具来管理自己的资料 - git远程库,适合团队的协作,成员之间共享资料 ## 注册gitee账号,登录,新建仓库 ![](image/%E6%96%B0%E5%BB%BA%E4%BB%93%E5%BA%93.png) ### 操作的核心命令: ### 提交五步核心命令 ``` 1、git init 初始化项目本地仓库 2、git add fileName fileName就是需要提交的文件 如果需要提交该文件夹中的所有的文件,那么运行命令 git add . 将所有的文件提交到暂存区。 把暂存区的文件提交到git版本库 引号中的内容是提交的备注,也就是帮助你对你提交的内容的记忆。 也就是说,你知道你提交了什么。 3、git commit -m "这是我提交的这叫效果" 提交到远程仓库 4、git pull 拉取 5、git push 推送 ``` ### 查看当前的仓库的状态 git status ### 查看所有提交的历史记录 git log ### 回退到上一个版本 git reset --hard HEAD^ ### 回退到指定版本 git reset --hard 12345(版本号的前五位) 回退、提交等操作,使用vscode可以直接可视化的操作,简单方便。