工作第一弹,认识git

本文深入解析Git版本控制系统的核心概念,包括工作区、暂存区、本地仓库、远程版本库及远程仓库副本的功能与操作。同时,阐述了Android的Repo工具如何有效管理多个Git仓库,以及Git的分支管理策略。
摘要由CSDN通过智能技术生成

GIT是一种版本控制软件,版本控制系统是一种记录一个或若干个内容变化,以便将来查询特定版本修订情况的系统。客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。服务起发生故障都可以从本地节点恢复数据。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

 repo是Android为了方便管理多个git库而开发的Python脚本。repo的出现,并非为了取代git,而是为了让Android开发者更为有效的利用git。   

所以很多repo命令行和git命令功能一致,两者可以共同认识,理解git的架构就可以认识两者。

GIT的架构,可以分为几个部分:

  •   
  • 1. 工作区(working directory)
  • 工作区,简言之就是你工作的区域。对于git而言,就是的本地工作目录。工作区的内容会包含提交到暂存区和版本库(当前提交点)的内容,同时也包含自己的修改内容。

  • 从远端服务器下载代码   repo init -u xxx(  具体地址);git clone具有相同功能

  • repo sync同步版本库;

  • repo start创建并切换分支

  • 然后可以开始你的开发工作

  • 2. 暂存区(stage area, 又称为索引区index)

  • 暂存区是git中一个非常重要的概念。是我们把修改提交版本库前的一个过渡阶段。查看GIT自带帮助手册的时候,通常以index来表示暂存区。在工作目录下有一个.git的目录,里面有个index文件,存储着关于暂存区的内容。

  • 提交代码,首先git status 可以查看你文件的变化情况;

  • git/repo diff 命令可以查看具体修改了什么代码;

  • 若文件变化是正常的(也就是你主动修改的),可以使用git add   将工作区内容添加到暂存区。

  •  git reset HEAD <文件名>来取消相关文件的暂存

  • 对未暂存的修改文件进行回滚的操作命令: git checkout -- <文件名>,根据上面的提示我们可以知道该操作可以放弃对某个为暂存的文件的修改。

  • 3. 本地仓库(local repository)

  • 版本控制系统的仓库,存在于本地。当执行git commit命令后,会将暂存区内容提交到本地仓库之中。在工作区下面有.git的目录,这个目录下的内容不属于工作区,里面便是仓库的数据信息,暂存区相关内容也在其中。

    4. 远程版本库(remote repository)

  • 远程版本库与本地仓库概念基本一致,不同之处在于一个存在远程,可用于远程协作,一个却是存在于本地。通过push/pull可实现本地与远程的交互;通过git/repo push 可以将本地存储的修改上传到远程仓库

  • 5.远程仓库副本

  • 可以理解为存在于本地的远程仓库缓存。如需更新,可通过git fetch/pull命令获取远程仓库内容。使用fech获取时,并未合并到本地仓库,此时可使用git merge实现远程仓库副本与本地仓库的合并。

    分支

    分支(branch)有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
    现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

     

    分支内部原理

    1、如下图所示,版本的每一次提交(commit),git都将它们根据提交的时间点串联成一条线。刚开始是只有一条时间线,即master分支,HEAD指向的是当前分支的当前版本。

     

    2、当创建了新分支,比如dev分支(通过命令git branch dev完成),git新建一个指针dev,dev=master,dev指向master指向的版本,然后切换到dev分支(通过命令git checkout dev完成),把HEAD指针指向dev,如下图。

    3、在dev分支上编码开发时,都是在dev上进行指针移动,比如在dev分支上commit一次,dev指针往前移动一步,但是master指针没有变,如下:

    4、当我们完成了dev分支上的工作,要进行分支合并,把dev分支的内容合并到master分支上(通过首先切换到master分支,git branch master,然后合并git merge dev命令完成)。其内部的原理,其实就是先把HEAD指针指向master,再把master指针指向现在的dev指针指向的内容。如下图。

    5、当合并分支的时候出现冲突(confict),比如在dev分支上commit了一个文件file1,同时在master分支上也提交了该文件file1,修改的地方不同(比如都修改了同一个语句),那么合并的时候就有可能出现冲突,如下图所示。

    这时候执行git merge dev命令,git会默认执行合并,但是要手动解决下冲突,然后在master上git add并且git commit,现在git分支的结构如下图。

    可以使用如下命令查看分支合并情况。

     

    git log --graph --pretty=oneline --abbrev-commit

     

    6、合并完成后,就可以删除掉dev分支(通过git branch -d dev命令完成)。

     

    如此,就是分支开发的原理。其好处也是显而易见的。

     

    分支策略

    如何合适地使用分支?

    在实际开发中,我们应该按照几个基本原则进行分支管理:
    1、master分支应该是非常稳定的,也就是仅用来发布新版本,平时不要在master分支上编码开发。master分支应该与远程仓库保持同步
    2、平常编码开发都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;dev分支也应该与远程保持同步;(git push/git pull也要解决冲突)
    3、你和团队成员每个人都在本地的dev分支上干活,每个人都有自己的分支,时不时地往远程dev分支上push/pull就可以了。(push/pull的时候是要解决冲突的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值