因为第一次实习所以终于接触了git
以前对git的印象一直以为是github是个类似网盘的东西可以帮助线上存取分享代码。
直到实习时发现shell命令里竟然有个git,才发现这个东西全称是 开源的分布式版本控制系统。总之是个非常强大的版本控制管理器,不能仅仅是可以存代码,而且能进行灵活代码版本控制,对多人合作完成的项目有一套完整的管理方式。
git作为分布式版本控制系统,与集中式不同的就是,其存储代码的方式不是仅有一个线上数据库。在集中式的管理方法中所有人都从代码数据库里上传和下载代码,这样会对中央节点造成很大的负荷,并且这样频繁的传输也有很大风险。当中央数据库出问题时,整个项目就陷入停滞,甚至中央数据库的数据丢失会导致所有人的努力前功尽弃。而且传输线路上的安全也存在很多隐患。
分布式版本控制分为线上和线下两个数据库,也就是说该项目的每个成员都保存着一个完整的代码数据库,而非只有线上数据库才有,这样首先就降低了中央数据库损失数据的风险。
然后,当用户需要更新本地代码,或是上传代码时,才将本地数据库的新增内容更新到中央数据库,或是从中央数据库下载内容。一定程度上缓解了中央数据库的压力。并且即使是临时的断网,也能继续使用本地数据库继续工作,等一切恢复正常之后再与中央数据库进行同步
在本地来说除了有本地数据库外还分为工作区与暂存区。工作区即用户本机上直接编辑代码的区域,而暂存区是用户在工作区编辑一部分代码后可以上传到暂存区,并且暂存区的内容是可以灵活回退的,暂存区的存在方便了用户保存阶段性代码或是对代码进行近期的回退和更改。在一天或是一个阶段的工作结束后,在暂存区的代码可以上传到本地数据库。当一个项目较为完整时,或是想与该项目其他成员分享代码时,可以通过上传到中央数据库实现。
最基础的首先要从git上获取一个项目的代码,可以使用git clone命令,该命令参数为git中央数据库上每个项目包含的一个ssh码,通过 git clone [ssh code] 即可获取代码
多人协作的工作模式通常是这样:
首先,可以试图用git push origin 推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
git中存在分支的概念,当多个人协同工作时,可能对一份项目代码进行不同方面的改动,可能是bug修复,可能是功能添加,可能是版本迭代。假设每个人的工作互不影响,每个人首先要拷到一份原代码再做改动,最后每个人的工作成果要合成才能得到一个最新的迭代过的项目代码。因此git的分支功能可以为此提供方便,对于一份源代码,其分支默认为master。
负责不同改动和开发的用户将在master分支的基础上创建自己的分支
通过 git branch 查看当前分支以及本地已有分支
通过 git branch [自定义分支名] 来创建分支,分支名前加参数 -d 用于删除已有分支(-D用于强制删除)
通过 git add [参数] <路径> 将代码从工作区上传到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用git commit命令进行提交了。 一般到直接使用git add . 表示直接上传当前目录的代码
-u参数,增加所有删除和修改的文件到暂存区
-A参数,增加所有删除和修改以及新增的文件到暂存区
通过 git commit -m “版本备注” 将代码从暂存区上传到本地数据库,因为git可以进行版本回退,每次上传到数据库的代码都可以通过指令回退,那么每次commit的代码都会存储在数据库中,为了区别每次提交的版本内容,因此必需填写注释标明该版本的个功能和变动。
主要是将暂存区里的改动给提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id. commit-id 在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里。
通过 git status 查看工作区代码相对于暂存区的差别,也能查看合并时冲突的文件目录
通过 git pull 从线上数据库更新代码
通过 git push 从本地数据库更新代码到线上数据库
通过 git checkout [分支名] 切换分支,分支名前加参数 -b 表示创建分支并切换到分支,相当于一句branch和一句checkout
通过 git checkout – [文件名] 将文件恢复到修改之前的状态
通过 git checkout -b [本地新建分支名] [远程克隆分支名] 将远程某分支克隆到本地并创建新分支,双方存在映射关系
通过 git merge [分支名] 将指定分支[参数内分支]合并到当前分支
通过 git log 查看修改历史记录 加参数 –graph 可以以图的方式查看合并时间线
通过 git status 临时存储当前正在修改的分支,以便临时切到别的分支上工作. 当然恢复该存储的方法是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除. 该命令的参数是 git stash list 输出的临时存储列表.
另一种方式是用git stash pop,恢复的同时把stash内容也删了
通过 git remote 查看远程库的信息
多人协作的工作模式通常是这样:
1.首先,可以试图用git push origin 推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
5.如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
删除本地分支:git branch -d 分支名称
强制删除本地分支:git branch -D 分支名称
删除远程分支:git push origin --delete 分支名称
git黑话:
LGTM — looks good to me - 看起来不错 - Riview 完别人的 PR ,没有问题
ACK — acknowledgement, i.e. agreed/accepted change
NACK/NAK — negative acknowledgement, i.e. disagree with change and/or concept
RFC — request for comments, i.e. I think this is a good idea, lets discuss
WIP — work in progress, do not merge yet - 开发中
AFAIK/AFAICT — as far as I know / can tell
IIRC — if I recall correctly
IANAL — “ I am not a lawyer ”, but I smell licensing issues
PTAL - Please Take A Look - 帮我看下 - 一般都是请别人 review 自己的 PR