| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> Git和Github及分支 -> 正文阅读 |
|
[开发工具]Git和Github及分支 |
版本控制系统文件进行更新迭代时通过手动修改会遇到操作麻烦、命名不规范、容易丢失、协作困难等问题 版本控制系统是一个用来记录文件变化,以便查看特定版本的系统 由手动管理文件改为软件管理 使用版本控制软件的好处:操作简便:只需记住几组简单的终端命令即可快速上手常见的版本控制软件 易于对比:可以对比前后版本的变化细节,而查找出问题 易于回溯:可以选定文件需要回溯到之前的某一个状态 不易丢失:误删的文件可以轻松恢复 协作方便:基于版本控制软件提供的分支功能,可以轻松实现多人协作开发 版本控制系统的分类本地版本控制系统:特点:使用软件来记录文件的不同版本,提高了工作效率,降低了手动维护版本的出错率 缺点:单机运行,不支持多人协作开发 版本数据库故障后,所有历史更新记录会丢失 集中化版本控制系统:特点:基于服务器、客户端的运行模式 服务器保存文件的所有更新记录 客户端只保留最新的文件版本 优点:联网运行,支持多人协作开发 缺点:不支持离线提交版本更新 中心服务器崩溃后,所有人无法正常工作 版本数据库故障后,所有历史更新记录会丢失 典型代表:SVN 分布式版本控制系统:特点:基于服务器、客户端的运行模式 服务器保存文件的所有更新记录 客户端是服务器的完整备份,并不是只保留最新的文件版本 优点:联网运行,支持多人协作开发 客户端断网后支持离线本地提交版本更新 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复 典型代表:Git git基础什么是GitGit是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统 特点:项目越大,开发者越多,越能体现出Git的高性能和高可用性 Git之所以快速和高效是因为它直接记录快照,而非差异对比,几乎所有操作都是本地执行 差异比较传统的版本控制系统(例如SVN)是基于差异的版本控制,存储的是一组基本文件和每一个文件随时间逐步积累的差异 好处:节省磁盘空间 缺点:耗时、效率低(因为每次切换版本时,都要在基本文件的基础上,逐步应用每一个版本直到生成最新版本) Git的记录快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份,如果没有修改就只保留一个链接指向之前的存储文件 例如:一个项目有abc三个文件,修改了啊文件,a文件就重新生成并被份,而bc两个文件就保留一个链接即可 缺点:占用磁盘空间较大 优点:版本切换时非常快 特点:空间换时间 几乎操作都是在本地进行,大多数操作只需要访问本地文件和资源Git中的三个区域:工作区、暂存区、Git仓库 Git中的三种状态:已修改(modified)、已暂存(staged)、已提交(committed) 注: 工作区的文件被修改了,但还没有放到暂存区,就是已修改状态 如果文件已修改并放入暂存区,就属于已暂存状态 如果Git仓库中保存着特定版本的文件,就属于已提交状态 基本的Git工作流程如下:1、在工作区中修改文件 2、将你想要下次提交的更改进行暂存 3、提交更新,找到暂存区的文件,将快照永久性存储到Git仓库 安装并配置Git下载地址:Git - Downloads 配置用户信息在桌面是单击鼠标右键,选择Git Bash Here 在弹出的界面中,输入以下代码去配置自己的用户信息 注:因为使用了--global(全局配置),那么该命令只需要运行一次就可以永久生效 通过以上代码配置的用户名和邮箱地址,会被写到c:/Users/用户名文件夹/.gitconfig文件中,用记事本打开即可查看到刚才输入的内容 使用命令快速查看Git的全局配置信息 查看所有的全局配置项
查看指定的全局配置项
获取帮助信息
使用命令,就会弹出完整的git-<verb>消息的网页 使用 -h就可在终端获得更简明的“help”输出
Git的基本操作获取Git仓库的两种方式1、将尚未进行版本控制的本地目录转换为Git仓库 2、从其它服务器克隆一个已存在的Git仓库 在现有的目录中初始化仓库1、在项目目录中,通过鼠标右键打开“Git Bash” 2、执行git init命令将当前的目录转化为Git仓库
注:git init命令会创建一个名为.git的隐藏目录,这个.git目录就是当前项目的Git仓库,里面包含了初始的必要文件,这些文件是Git仓库的必要组成部分 工作区中的每一个文件可能有4种状态,这种状态分为两大类未被Git管理: 未跟踪(untracked)--不被Git所管理的文件 已被Git管理: 未修改(unmodified)--工作区中文件的内容和Git仓库中文件的内容保持一致 已修改(modified)--工作区中文件的内容和Git仓库中文件的内容不一致 已暂存(staged)--工作区中被修改的文件已被放到暂存区,准备将修改后的文件保存到Git仓库 Git操作的终极结果就是让工作区中的文件都处于“未修改”的状态 查看文件处于什么状态
如果文件名出现在untracked files(未跟踪的文件)下面,则意味着Git在之前的快照(提交)中没有这些文件;Git不会自动将之纳入 如果文件名在changes to be committled下面,说明已被跟踪并处于暂存状态 以精简的方式显示文件的状态
注:--short和-s是等价的可以进行平替 未跟踪的文件前面会有红色的??标记 新添加到暂存区的文件前面有绿色的A的标记 跟踪这个文件(即将文件添加到暂存区中)
这个命令有三个功效: 1、可以把它开始跟踪新文件 2、把已跟踪的、且已修改的文件放到暂存区 3、把有冲突的文件标记为已解决状态 提交暂存区文件
当有文件进入暂存区就可以使用git commit命令进行提交,其中-m选项后面是对本次的提交消息中的内容进行进一步的描述 跟踪文件被修改当文件已经被Git跟踪,并且工作区和Git仓库中的文件内容保存一致,当我们修改了文件的内容再次运行git status命令,文件出现在changes not staged for commit下面,说明已跟踪的内容发生了变化,但还没有放入暂存区 使用-s查看,文件名前面会有一个红色的M标记 当我们将已跟踪、已修改的文件放到暂存区,使用git status -s查看该状态文件名前面会出现一个绿色的M标记 撤销对文件的修改
指:把工作区中对应文件的修改,还原成Git仓库中所保存的版本 结果:所有的修改会丢失,且无法恢复 本质:用Git仓库中保存的文件,覆盖工作区中指定的文件 向暂存区中一次性添加多个文件
一次性将所有的新增和修改过的文件加入到暂存区 取消暂存的文件从暂存区移除对应的文件
从暂存区中移除所有的文件
跳过暂存区
提交时把所有已经跟踪过的文件暂存一并提交,跳过了git add步骤 从Git仓库中移除文件的方式:从Git仓库和工作区中同时移除该文件
删除后用git status -s查看状态,该文件名前面出现会绿色的D 标志 只从Git仓库中移除该文件,但保留工作区的该文件
删除后用 git status -s 查看状态,出现两个该文件名,一个前面有绿色的D标志,一个前面有红色的??标志,在次使用git commit -m“ ”提交后,使用git status -s查看状态,该文件名只有一个且前面有红色的??标志,说明该文件未被跟踪 忽略文件当文件无需纳入Git管理,且不希望总出现在未跟踪文件列表时,我们可以创建一个名为 .gitignore的配置文件,列出忽略文件的匹配模式 文件.gitignore的格式规范: 1、以#开头的是注释 2、以/结尾的是目录 3、以/开头防止递归 4、以!开头表示取反 5、可以使用glob模式进行文件和文件夹的匹配 glob模式 glob指简化了的正则表达式: 1、星号* 匹配零个或多个任意字符 2、[abc]匹配任何一个列在方括号中的字符(匹配一个a或者匹配一个b或者匹配一个c) 3、问号?只匹配一个任意字符 4、短划线分隔两个字符表示在这两个字符范围内的都可以匹配(如[0-9]表示匹配所有0到9的数字) 5、两个星号**表示匹配任意中间目录(如a/星号星号/z可以匹配a/z、a/b/z、a/b/c/z等) 查看项目的提交历史
按时间先后顺序列出所有提交历史,最近的提交在最上面(倒序) git log 使用?q?可以提前结束查看 只展示最新的两条提交历史,数字可以按需填写
在一行上展示最近两条提交历史的信息
在一行上展示最近两条提交历史的信息,并自定义输出的格式 %h 提交的简写哈希值 %an作者名字 %ar作者修订日期,按多久以前的方式显示 %s提交说明
回退到指定的版本先在一行上展示所有的提交历史,每一个提交历史前都有一个ID
根据指定的提交 ID 回退到指定版本
在旧版本中,查看命令操作的历史
再次根据最新的提交ID,跳转到最新版本
?开源开源许可协议(Open Source License)为了限制使用者的使用范围和保护作者的权力,每个开源项目都应该遵守开源许可协议 常见的5种开源许可协议:BSD(Berkeley Software Distribution) Apache Licence 2.0 GPL(GNU General Public License) 具有传染性的一种开源协议,不允许修改后和衍生的的代码作为闭源的商业软件发布和销售 使用GPL的最著名的软件项目是:Linux LGPL(GNU Lesser General Public License) MIT(Massachusetts Institute of Technology,MIT) 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息 使用MIT的软件项目有:jQuery、node.js 开源项目托管平台免费存放开源项目源代码的网站,叫做开源项目托管平台。 目前世界上比较出名的有:Github(全球最牛) Gitlab(对代码私有性支持较好,企业用户较多) Gitee(又叫码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好) 注:以上3个只能托管以Git管理的项目源代码 Github前提需先注册用户,创建空白的远程仓库 远程仓库的两种访问方式(都需先创建本地仓库):HTTPS零配置;但是每次访问仓库时,都需要重复输入Github的账号和密码 第二次提交,只需输入 git push即可同步远程和本地仓库 SSH需要进行额外的配置;但是配置成功后,每次访问就不需要输入Github账号和密码 注:实际开发中推荐使用SSH SSH key作用:实现本地仓库和Github之间免登录的加密数据传输 好处:免登录身份认证、数据加密传输 由两部分组成: 1、id_rsa(私钥文件,存放于客户端的电脑中即可) 2、id_rsa.pub(公钥文件,需要配置到Github中) 生成SSH Key1、打开Git Bash 2、输入ssh-keygen -t rsa -b 4096 -C "注册Github账号时填写的邮箱" 3、连续敲击3次回车,即可在c:\user\用户名文件.ssh目录中生成id_rsa和id_rsa.pub两个文件 配置SSH key1、使用记事本打开id_rsa.pub文件,复制里面的文本内容 2、登录Github,点击头像--Settings--SSH and GPG Keys--New SSH key 3、将复制的内容粘贴到key对应的文本框中 4、在Title文本框中任意填写一个名称,来标识这个Key从何而来 检测SSH Key是否配置成功输入ssh -T git@github.com 敲击回车 在弹出内容后输入yes后,如果出现hi 你的用户名即代表你成功 将远程仓库克隆到本地
分支master主分支当初始化本地Git仓库时,会默认创建一个master的分支。通常将其称为主分支 作用就是用来保存和记录整个项目已完成的功能代码 功能分支用来开发新功能的分支,是临时从master主分支上分叉出的,最终需合并到master 查看当前仓库中所有的分支列表
注:分支名字前面有*号就代表当前处于该分支 基于当前分支,创建新分支(新分支中的代码和当前分支中的完全一致)
注:执行完创建新分支命令后,用户当前还是处于master分支 切换到指定分支
快速创建和切换分支-b表示创建一个新分支 checkout表示切换到新建的分支上 表示创建并切换到当前分支
合并分支先切换到master主分支 ?将指定分支的代码合并到master主分支上
删除分支
注:删除某分支时,不能处于该分支上 遇到冲突时的分支合并两个不同的分支对同一个文件进行不同的修改,Git无法干净的合并,只能手动解决冲突 在master上使用vscode打开文件,vscode中会有选项,选择不同选项进行操作,最后将所有文件提交 git add . 然后保存git commit -m “ ” 将本地分支推送到远程仓库-u 表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带 -u 参数
例:git push -u origin payment :pay 如果希望远程分支的名称和本地分支名称一致,可以对命令简化
查看远程仓库中所有的分支列表
跟踪分支:从远程仓库中,把远程分支下载到本地仓库 从远程仓库中,把对应的远程分支下载到本地仓库,保持本地分支和远程分支名称相同
从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
拉取远程分支的最新代码
删除远程仓库中,指定名称的远程分支
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:19:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |