一文讲清Git的基础知识|Git简明教程LOL赛事押注
点击量: 发布时间:2022-12-05 17:51:30

  对于程序员来说,Git应该是每天都要打交道的工具吧,但很多时候我们都只是停留在git add、git push、git pull等简单命令的使用上,又或者只是使用GUI工具(如Sourcetree等)点击操作而已,对Git并没有什么全面的了解,碰到问题可能需要不断上网查询。

  因此,为了更好地使用Git,也为了让更全面地理解Git,就将对Git的学习总结为**《 Git简明教程》**,方便日后随时查阅,也希望对其他人有所帮助!

  Git是一个分布式版本控制系统,而SVN、CVS等则为集中式版本控制系统。

  集中式版本控制系统的特点是需要远程服务器,如果无法连接远程服务器,我们所做的变更就无法提交,如下图所示:

  而在分布式版本控制系统中,每个端都保存着仓库完整的信息,不用联网也可以查询到所有的变更历史、在本地进行commit、checkout等操作,仅当你需要将变更推送到远程仓库,才需要网络,如下图所示:

  大部分操作都在本地进行,不需要连网,本地保存着仓库的完整信息教程知识,如果远程仓库损坏,随时可以用本地仓库进行数据恢复。

  Git与其他版本控制系统的其他不同之处在于Git对待数据的方式,Git就像一个小型的文件系统,在我们每次提交,对整个文件系统做一个快照。

  Git 中所有的数据在存储前使用哈希算法计算一个哈希值,只要内容一改变,哈希值就会发生,这样可以确保任何数据的改变都可以被Git察觉,进而保护数据的完整性。

  一般的版本控制系统都支持分支管理,然而这些系统创建分支就是把整个系统复制一份而已,这对于大型项目来说,就很费时间了,而Git则完全不同,Git的分支是非常轻量级的,在Git中,分支的创建、删除、合并都非常快速,有时只是移动一个指针而已。

  刚开始使用Git时,需要配置一下Git环境,第一件事就是配置你的用户名和邮件地址,这里的用户名和邮箱地址会写入到你之后的每一次提交当中:

  上面使用git config命令时,我们使用--global选项,表示该配置对所有的仓库都有效,实际上Git的配置有三个级别,对应的命令选项为--global,--system,--local,其中--local优先级最高LOL赛事押注,--system优化级最低。

  表示对系统上所有用户的所有仓库都有效,对应的修改会保存在/etc/gitconfig文件中,由于是系统级别的配置,因此需要管理员权限才能操作。

  表示对当前用户的所有仓库都有效,对应配置会保存在~/.gitcofnig或者fig/git/config文件中。

  对当前仓库有效,对应的配置会保存在项目的.git/config文件当中。

  这里有几个概念是我们学习Git必需要厘清的概念LOL赛事押注,即:仓库(Repository)、工作区(workspace)、暂存区(Index,也称为索引)、远程仓库(Remote),它们之间的关系如下图所示:

  执行完上面的命令之后,我们便在demo目录中初始化了一个仓库,这时候Git默认帮我们创建一个名称为master或者main的分支。

  除了初始化空仓库之外,有时候我们需要参与一些已经进行的项目,这样的项目已经有存在的仓库了,这时候我们可以采用克隆的方式把远程仓库同步到我们本地目录,如:

  默认情况下,会把远程版本库的名称作为克隆到本地目录的名称,我们也可以自定义本地目录的名称,如:

  克隆后,默认也是进入一个master或者main的主分支,该分支会关联到我们克隆的远程服务器上的同名分支,我们也可以指定要克隆远程服务器的哪个分支:

  git clone -b develop 复制代码分支是Git中非常重要的内容,也是Git精华之所在,我们以后的文章再详细讲解!区分工作区与仓库

  经过上述步骤后,我们在demo目录中生成了一个仓库,这里有一点要注意的是,很多初学者往往把demo看作是仓库,其实demo目录下的.git才是仓库,而demo目录则是工作区。

  工作区是我们操作文件的地方,我们添加、修改或删除文件都是在demo目录中进行的,而最终提交的数据是保存到.git目录中的,所以.git目录才是仓库,这个目录保留着整个仓库的所有信息。

  SVN或CVS的使用习惯是直接提交所修改的内容,而Git并不是这样的,在Git中,当我们在工作区对文件作出修改后,并不能直接提交,而是需要将文件添加到暂存区(Index或Stage),

  除了一个一个地添加之外,git add 命令也支持将全部修改一次性添加到暂存区,如:

  对于添加到暂存区的文件,也可以执行撤消操作,比如我们想将上面添加到暂存区的文件撤回工作区,可以这样做:

  把要提交的文件添加到暂存区后,如果想提交到仓库中,可使用git commit命令:

  执行上面的命令后,会弹出一个vim编辑器窗口,我们可以在这个窗口编辑提交说明,编辑完成后保存退出就完成了一次提交了。

  当然,也可以在git commit命令跟上-m选项来附带说明文字,这样可以直接提交:

  虽然使用暂存区,可以让我们更好的挑选自己要提交的修改,但这样多一个步骤总是很烦人,所以Git支持在git add命令后跟上一个-a选项,这样可以直接跳过暂存区,直接将当前工作的修改提交到仓库中:

  不过,要注意的是,未跟踪的文件并不会直接被提交,还是需要添加到暂存区的。

  从上面的操作中,我们可以看到,一个文件从创建到提交,经历了几个状态的变化,如下图所示:

  到目前为止,我们的所有操作还是在本地进行的,当我们想把与仓库与别人共享,或者参与别人的项目时,这时候就需要连接远程仓库了。

  远程仓库,并不一定说明该仓库一定要在互联网中的另一台服务器上,远程仓库也可以是你本机的另一个仓库查看远程仓库

  如果我们使用git clone命令克隆一个远程版本库,Git会帮我们将该远程仓库命名为origin。

  也可以自己添加当前仓库关联的远程仓库,比如下面我们添加一个名称为foo的仓库:

  执行上面命令的话,会推送当前所有分支,推送到远程仓库中同名的分支下,当然我们也可以推送到指定的分支,比如我们指定推送到foo的develop分支上:

  如果别人向远程版本库推送了变更,而我们想同步到本地的仓库,可以使用git fetch将远程仓库的最新变更抓取回来:

  但是,执行git fetch后也只是把别人推送到远程仓库的变更拉回来而已,却并不会把变更合并到我们当前工作区,所以我们还需要自己手动执行合并命令:

  上面的命令没有指定合并哪个远程仓库分支,所以会默认合并当前分支所跟踪的远程分支LOL赛事押注,也可以指定合并哪个分支:

  如果觉得执行git fetch和git merge比较麻烦的话,也可以使用git pull命令,这个命令在抓取远程仓库数据后,会自动执行合并:LOL赛事押注