青训营 X Git
Git作为版本控制工具,在代码开发流程中必不可少,无论是回溯版本还是协作开发,都离不开Git。
基本使用
下面是一些基础的git功能与命令:
- 配置
git configgot remote
- 提交代码
git addgit commit
- 远端同步
- 拉取代码
clonepullfetch
- 推送代码
push
- 拉取代码
在创建项目时,需要在项目目录下使用git init初始化项目,并根据需求设定初始分支等参数。初始化后,会在项目目录下生成一个.git目录,即git仓库目录。
git存在三种级别的配置文件,级别由高到低为:system、global、local,低级本的配置会覆盖高级别吧的配置。可以使用git config指令修改配置。
git remote是本地仓库与远端仓库的关联,支持https和ssh两种源。
如何对一个Origin使用不同的push和fetch URL(即拉取和推送的仓库不同)?
可以使用
git remote set-url -add -push origin git@github.com: xxx/git.git命令
HTTP方式免密访问远端仓库时,密钥可以存储与内存(设置过期时间)和硬盘中,但是存在安全性问题。SSH方式密钥以证书形式存储在服务端,相对安全。
Objects
git中包含四种object: commit、tree、blob以及一种带tag的object。
Blob存储文件信息、Tree存储文件的目录信息、Commit存储提交信息(一个commit可以对应唯一版本的代码)。
Refs
Refs文件存储对应的Commit ID,因此可以把ref当作指针,指向对应的Commit来表示当前Ref对应的版本。
refs/heads前缀表示的是分支,refs/tags前缀表示的是标签
分支Branch一般用于开发阶段,不断添加Commit进行迭代;标签Tag表示一个稳定版本,指向的Commit一般不会变更
远端同步
拉取代码:
-
clone
拉取完整仓库到本地目录,可以指定分支和深度
-
fetch
将某些远端的最新代码拉取到本地,不会执行merge操作,会修改refs/remote内的分支信息,如果需要和本地代码合并要手动操作
-
pull
拉取远端某分支,并和本地代码进行合并,等同于git fetch + git merge;可以通过git pull --rebase完成git fetch + git rebase操作;可能存在冲突需要解决冲突。
rebase会将当前分支连接到master的最新commit上,可以保证提交记录的简洁,但是会影响记录本身,导致一些回溯问题。
推送代码:
一般使用git push origin master命令即可完成
实际研发流程
版本管理方式在实际开发中可以分为两种——集中式工作流和分支管理工作流。集中式工作流只在主分支上进行开发,虽然保证了主分支的整洁性但是场景相对局限。
分支管理工作流又可以分成三种:Git Flow(规则严格,流程复杂)、Github Flow、Gitlab Flow。
对于小型团队推荐使用Github Flow,提交最好少量多次。
小结
Git的知识不算难,但是设计很多具体操作,需要多加使用和练习才能掌握。学习好git的使用,参加开源项目也是一个不错的经验。
坚持学习,无限进步!