| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> 代码管理工具:Git -> 正文阅读 |
|
[开发工具]代码管理工具:Git |
代码管理工具:Git前言Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。 版本控制版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单,但是特别容易犯错。 为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。 其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
分布式版本控制系统(Distributed Version Control System,简称 DVCS)在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。 存储差异Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方式。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce、Bazaar 等等) 将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 (它们通常称作 基于差异(delta-based) 的版本控制)。 完整性Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。 Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成的字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:
Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。 三种状态Git 有三种状态,你的文件可能处于其中之一:
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 仓库。 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。 Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。 安装Git在你开始使用 Git 前,需要将它安装在你的计算机上。 即便已经安装,最好将它升级到最新的版本。 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装。 Windows安装安装方法有三种,如下所示:
我们以第一种方式进行安装,点击安装好的
Linux安装有两种方式:通过yum安装、通过
非常简单的安装方式,输入命令:
等待安装
有人觉得从源码安装 Git 更实用,因为你能得到最新的版本。 二进制安装程序倾向于有一些滞后,当然近几年 Git 已经成熟,这个差异不再显著。 如果你想从源码安装 Git,需要安装 Git 依赖的库:autotools、curl、zlib、openssl、expat 和 libiconv,命令如下所示:
我们可以通过命令
由于网速问题,我们先下载到本地,在上传到服务器
解压后,如图所示
执行编译命令
安装Git文件路径
底部加上命令
刷新环境变量
查看Git版本,命令如下所示:
初始设定
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
配置完成后,我们也可以查看已有配置:
Git仓库通常有两种获取 Git 项目仓库的方式:
将尚未进行版本控制的本地目录转换为 Git 仓库。 (1)初始化Git仓库 我们先进入需要作为 Git 仓库的目录(以简单的Maven项目为例),然后执行命令,进行初始化操作
这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。 (2)将项目添加到存储库 先用命令告诉 Git 开始对这些文件进行跟踪(如果以后创建新文件都需要先进行此操作)。
现在,你已经得到了一个存在被追踪文件与初始提交的 Git 仓库。
从其它服务器 克隆 一个已存在的 Git 仓库。 以gitee为例,创建一个项目。
注:中途会提示你输入用户名和密码。
如果用户名是邮箱需要将@ 符号需要转义成 %40,避免冲突。 项目拉取好后,本地会生成一个 文件状态我们可以通过命令查看当前项目的状态。
这说明当前所在分支相当干净,没有出现任何处于未跟踪状态的新文件。 现在,让我们在项目下创建一个新的 README 文件。
我们可以看到提示我们使用 如果你觉得
例如,上面的状态报告显示: README 文件在工作区已修改但尚未暂存,而 lib/simplegit.rb 文件已修改且已暂存。 Rakefile 文件已修改,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分。 移动文件Git 非常聪明,它会推断出究竟发生了什么。
运行
历史提交记录在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。
其中一个比较有用的选项是
你也可以为
如果你只想看到校验和的信息,可以使用
撤销操作有可能想要撤消某些操作。注意,有些撤消操作是不可逆的。 这是在使用 Git 的过程中,会因为操作失误而导致之前的工作丢失的少有的几个地方之一。
例如,你新建文件或者修改文件,你想重暂存文件中恢复,
如果你想把已经修改,但是未提交到暂存区的文件,恢复成最后一次提交的样子, 远程仓库拉取/推送实际日常开发中,是一个团队的编码,所以为了方便测试、上线,你需要拉取服务器上的代码或将你的代码上传到远程仓库。
打标签Git 可以给仓库历史中的某一个提交打上标签,以示重要。
假设我们使用标签发布到远程
要删除掉你本地仓库上的标签,可以使用命令 分支使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。
我们可以通过命令查看当前项目有哪些分支
根据开发需求,你可以切换到不同的分支上(为了不让你当前分支的努力不白费,请再切换分支时,保证当前分支的干净,或许你可将你的代码暂存或提交)
第一次切换分支需要加上
切换到新的分支后,当前指针指向新分支,master分支和新分支同时指向一个校验和。
如果分支不需要了,可以删除分支
分支的合并与冲突修复
日常开发中,使用分支进行代码编写或维护操作,测试正常没问题后,需要合并到master分支。
注意:合并分支是指当前分支下合并其它分支操作,比如:将其它分支代码合并到master分支。
如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。 假设:现在再master分支上修改代码后提交、然后再其它分支上对同一个代码修改并提交,执行合并操作,如下所示
远程分支前面讲述的分支操作,都是本地操作,如果你尝试通过本地分支,
以Gitee为例,我们再项目上创建一个分支
然后本地使用命令,查看远程分支的记录。
使用命令查看所有分支。
开发过程中,分支提交代码之前,为了防止代码被覆盖的情况,需要先拉取其它分支的代码,一般都是拉取已经合并的master分支代码
切换到远程分支上,执行 如果你需要合并到master就需要再Gitee上提交合并申请,就像这样:
贮藏如果你再当前分支已经工作了,此时新的需求让你切换当另一个分支进行工作,你不想为了还未完成的工作创建一次提交,最好的办法贮藏。 贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。 比如:现在需要切换分支,但是当前分支下有更改的文件。
然后查看当前分支状态
恢复完后,为了以后使用时不混淆,可以将此贮藏删除
清理清理工作目录有一些常见的原因,比如说为了移除由合并或外部工具生成的东西, 或是为了运行一个干净的构建而移除之前构建的残留。 你需要谨慎地使用这个命令,因为它被设计为从工作目录中移除未被追踪的文件。 如果你改变主意了,你也不一定能找回来那些文件的内容。 一个更安全的选项是运行 你可以使用 使用 图形化管理工具为了更高效的开发工作,使用图形化软件来简化复杂的命令。有很多优秀的图形化工具:GitHub、TortoiseGit 等。有兴趣的可以去官网查看更多版本 IntelliJ IDEAIDEA基本上是大多数开发中经常使用的工具,下面讲解IDEA中使用Git。 左上角选择File→Settings打开设置窗口,找到Version Control下的Git选项 提交代码如果你修改代码后,要发布到测试环境上去,选中文件后,右击选择Git->Commit Directory。
查看提交记录提交完成后我们可以查看自己的提交记录,也可查看别人的提交记录。 右击Git->Repository->Fetch可以更新日志和分支。 然后点击左下角Version Control(如果左下角没有,点左上角工具栏View->Tool Windows),可以看到记录。 拉取代码防止冲突或解决异常,我们通常会拉取最新的代码来解决这些问题。 选择指定项目右击Git->Repository->Pull 解决冲突
如果你再当前分支修改了代码,准备push到远程仓库时,出现了异常。
如果你本地修改了某个文件,你在pull代码的时候,可能有重复的文件,这时候IDEA会提示你,保存后再操作 另一种先Commit到本地仓库后再pull,这样保存你已经修改的代码。 分支管理IDEA可以灵活的切换分支。再工作栏VCS->Git->Branches查看有那些分支。 除此之外还可以再右下角可以看到当前的分支。 可以通过Git->Repository->Fetch拉取新的分支,新分支再Remote Branches列表下可以看到,Local Branches为本地分支,使用后的远程分支会纳入本地分支中。 我们也可以切换分支,选择你的项目,选择分支点击Checkout,即可切换分支。 Visual Studio Code除了IDEA外,Visual Studio Code简称VS Code,也是开发中常用到的软件。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |