Git 版本控制

写在前面的话:
对于我非科班出生的小白来说,好多命令行操作的工具的使用是第一块需要搬起的砖。平时的工作中,我们会在用到的时候,直接上百度相关的命令,操作完就会匆匆解决自己的工作业务。工作之外,还需要理解那些基本命令背后的原理和常规用法。需要比较详细的了解工作机制,后面才会得心应手。

一.git版本控制解决了什么业界问题(这部分可以空闲的时候看,有助于明白Git的背景;实际项目中我们就直接用)
如果你开发过项目,那你一定有这样的经历:想添加或者修改一个功能,又怕将来新增或者修改的代码破坏原有的代码,因此,为了保证已有正确代码可用,你通常会复制一份以防后患,但是随着应用系统的不断升级,你的项目目录可能会变很多,比较复杂。过了一段时间,你想找回某个版本中的功能,但是已经记不清这个功能到底保存在哪个文件夹中,文件夹能够体现的信息只有版本号和一些简单的标识,于是你只能将每个版本导入到IDE中然后运行查看应用的功能,直到找到你所需要的版本,看着一堆乱七八糟的文件夹,你可能只想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,因为一且删除你将无法恢复到其他的版本。如果是多人合作开发,那么你们如何同步代码呢?用QQ传文件,用U盘复制?如果你们修改的是同一个文件,那么如何确保这个文件正确合并了所有人编写的代码?

需求:于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去,如果想查看某次改动,只需要在这个软件里看一下就可以,岂不是很方便?

答案:Git解决了这些问题,通过版本控制系统,可以为每个版本创建一个快照,并且填写相关的记录信息,这样便于你后续回退到这个版本,而你所有的修改、提交都会在版本系统中留下记录,这样就有更多的信息能够定位特定的版本。从此就结束了手动管理多个版本的原始时代,进入到版本控制的新世纪,更进一步讲,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。因此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

二.git基本原理(这部分要看看,可以更好的使用Git)
那么Git究竟是怎样的一个系统呢?
1.直接记录快照,而非差异比较
Gt和其他版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,大多数原理并不保存这些前后变化的差异数据,实际上,git更像是把变化的文件做快照后,记录在一个小型的文件系统中。每次提交更新时它会纵览一遍所有文件的指纹信息并对文件做一快照,然后保存一个指向这次快照的索引,为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照做一链接。
在这里插入图片描述
2.近乎所有操作都是本地执行

git将当前项目的历史更新都存储本地磁盘上,所以在处理速度上要比其他依赖于网络的系统快得多。

3.时刻保持数据完整性 (需要明白的部分)

在保存到Git之前,所有数据都要进行内容的校验和( checksum)计算,并将此结果作为数据

一标识和索引。这项特性作为Git的设计哲学,它建立在整体架构的最底层。所以,如果文件时变得不完整,或者磁盘损坏导致文件数据缺失,git都能立即察觉。使用SHA1算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个SBA值,作为指纹字符串。该字串由40个十六进制字符(0~9及a-D组成,看起来地像是:

6552252987aa493b528696c6d3b00373

在git数据库中的东西都是用此哈希值来作索引的,而不是靠文件合希值。

4.文件的3种状态 (识记的部分)

在Git管理下的项目有3种状态,这几个状态在理解t原理上非常重要,对于任何一个文件,在git内都只有3种状态:已提交( committed)【git commit 操作后】、已修( modified)【本地文件编辑后】和已暂存( staged)【git add】。

三.Git基本配置(开始打命令操作起来)

一般在新的系统上,我们都需要先配置下自已的Git工作环境。配置工作只需一次,以后升级时还会沿用现在的配置,当然,如果需要,你随时可以用相同的命令修改已有的配,以后升饭git提供了一个叫做 git config的工具,专门用来配置或读取相应的工作环境变量,而正是由这些环境变量决定了git在各个环节的具体工作方式和行为,这些变量通常可以存放在以下2个不同的地方,

1> ~/.gitconfig

用户目录下的配置文件只适用于该用户若使用 git confi时用- global选项,读写的就是这个文件。(在配置有问题时候,建议使用vim ~/.gitconfig 直接修改)

2> 当前项目下的 .git/config

当项日下的配置仅针对当项目有效,每一个别的配置都会覆盖上层的相同置。

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次Git提交时都会引用这两条信息,说明是谁提交了更新,所以,会随更新内容一起被永久纳入历史记录

git config --global user.name ‘用户名称’

git config --blobal user.email ‘登录邮箱’

如果用了- global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者邮件,只要去掉-global选项重新配置即可,新的设定保存在当前项目的 .git/config文件里。

要检查已有的配置信息,可以使用 git config --list命令:git config --list

四.进行版本控制的第一步:git init

1、git init

在你的项目的根目录下执行git init命令,该命令会在你的根目录下创建了一个隐的Git目录,该目录中包含了该项目在Git中的相关配置和信息,Git就是根据里面的数据对你的项目进行版本控制。

2.git status

在初始化了需要版本控制的项目之后,我们就可以继续进行后续的工作。 Git status命令是我们最为常用的命令之一,它用于检查本地项目的状态。(多使用这个命令,确保自己的修改状态正确)

3.git add

基本用法:一种用法是添加某个文件,另一种是添加某个目录下的所有文件示例加下

git add a #添加 a这个文件

git add . # 添加当前目录下的所有文件

通常由于 Android的项目文件比较多,一次性可能会修改多个文件,因比,最为常用的是

Git add . 命令,一次性将所有文件都添加到下次要添加的列表中执行该命令.

之后我们再次数行git status命令查看当前状态(执行完一些重要命令之后通过 Git status査看状态应该是你使用Git的习惯,这样避免出现遗漏等问题)。

4 提交——Git commit

将你的功能提交到本地仓库上:

git commit -m “这里写你的提交说明” #形式1 :通过-m提交简短的信息

使用场景:此方法比较便捷、方便,自己在使用github时候可以使用

git commit #形式2:通过git commit会跳转到vim编辑器

使用场景:提交信息有一定格式或者提交的文字较多时候,在公司上班时候建议用此种方法。

结果:此时你的代码已经提交到本地仓库。用git status 查看一下。

5.查看项目历史记录----git log (这个很有用,尤其是查看以前的记录)

当我们需要查看某个项目的提交历史时,用此命令。Git log 后显示的信息为:

commit 6a069e69055f09bb6fe109f5b5f38c4b6389a42b #commit_id 信息指纹

Author: 18325553116 2931050856@qq.com #提交人

Date: Tue Oct 8 08:00:57 2019 -0700 #时间

first.c file                                    #提交信息

我们使用git show +commit_id 查看具体的修改的代码。

git show 6a069e69055f09bb6fe109f5b5f38c4b6389a42b

commit 6a069e69055f09bb6fe109f5b5f38c4b6389a42b

Author: 18325553116 2931050856@qq.com

Date: Tue Oct 8 08:00:57 2019 -0700

first.c file

diff --git a/first.c b/first.c

new file mode 100644

index 0000000…59b0b1d

— /dev/null

+++ b/first.c

@@ -0,0 +1,9 @@

+#include “stdio.h”

+#include “stlib.h”

+#include “string.h”

+int main()

+{

  •   printf("hello word\n0");
    
  •   return 0;
    

+}

6.下载程序----git clone

场景:将别人托管在网站上的开源库下载到本地计算机中。Git clone 可以把远程(网站上的)项目下载到本地。

Eg: 网址为: http://github.com/a

那么下载的地址为: git@github.com/a (注意http:// 变成了git@)

下载命令为: git clone git@github.com/a.git (注意多了.git)

结果:本地创建了目录a

7.不同分支----git branch

git管理的项目是按照分支来管理的,我们的项目在创建后,就默认为master(主分支)分支,只有一个项目当然是主分支了,以后你所有的代码的修改和操作都是在master分支下。

如果再创建一个分支b,把代码切换到另一个分支,所有的操作都是在对应的分之下。两个分支之间不会影响。你可以在b分支上的代码开发完毕后,把b分支合并到master分支上。

如果b分支感觉不需要了,可以直接删掉b分支,master分支不会受影响。

创建分支命令:

git branch + 分支名称 git branch b #创建分支b

查看当前项目代码所在的分支:

git branch

切换分支到b分支:

git checkout b

合并分支:git merge b

8.解决冲突:

产生冲突的原因:两个人或者多个同时修改了同一个文件同一处代码,版本控制器无法确定到底是谁做的修改。

解决方法:此时修改的代码会在冲突的部分自动加入冲突标识。 “<<<<<<<<<HEAD”与“===

分支命”

删除冲突标识,并确定一个做修改,然后 git add 、git commit 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值