我们好,热烈欢迎走进周三git专题讲座。
git clone
在上一首诗之中他们聊了怎么在github之中建立两个属于自己的工程项目(repository),全称repo。除建立自己的repo以外,他们更多的情况是复本自己的repo,这种才能获得自己重新整理好的标识符数据资料甚么的,也更合乎开放源码(白嫖)信念嘛。
那个指示他们都晓得,通过git clone再加之repo的门牌号就能了。但这里的门牌号是这儿来的呢?单纯如是说呵呵,这是在github之中找出的。他们点选Code那个绿色生态按键,在上方的弹左上方点选呵呵,就能拷贝留下来。一般情况下他们预设采用SSH协定,假如你看完他们上首诗不然,你一定晓得我在说甚么。总之你也能用HTTPS。
还有两个问题是他们clone留下来的那个repo它存有这儿呢?标准答案也很单纯,是他们在这儿运转的指示它就存有这儿。
除此之外反正两个小基本功,他们这种clone留下来之后会在他们邻近地区增建两个配置文档,然后把那个repo之中的文本存有里头。那个配置文档的英文名字预设是那个repo的英文名字,假如你不讨厌那个英文名字,也能在指示之中进行增设,增设的方式也很单纯,是在指示最后加之两个你想起的英文名字。
比如说这种,你得到的配置文档是TechFlow。
git 五大状况
即便是git初学者应该也都晓得gitBleymard,也是常说的git add,git commit和git push。但当他们采用那些指示的时候,是不是Dharmapuri他们为甚么要用那些指示呢?它到底代表者了甚么涵义,那么做的象征意义是甚么,假如他们不那么干又会发生甚么?
假如我只是单纯地说你git add是加进,git commit是递交,那么只不过一点儿用也没有,和没说一样。因为有关git下层的管理体制一点儿也没提,他们也不晓得为甚么要加进,要递交,递交了加进了意味着甚么。所以要解释清楚git这Bleymard的原理,需要他们做一些更细致地解释,至少需要把git内部的四个状况讲清楚。
在他们进行这一段之前,首先和我们明确两个概念,是git系统和他们计算机之中的文档系统只不过是两码事。虽然git有很多神奇的操作,能自由地回滚或者是建立文档,但它依然是两套系统。git并不会自发地感知文档系统之中文档的变更,除非他们执行相关的指示。能理解为它是被动响应的,毕竟git只是他们安装的两个软件,并不是操作系统的一部分。
这一点儿看似是废话,但是很重要的基础,假如没搞明白,后面会产生很多疑惑。
他们继续来说git内部的状况,这四个状况分别是untrack,modified,committed和staged。之所以用英文,是为了我们以后阅读其他文档不会产生歧义。因为我们翻译的译名可能有多个版本,这会导致歧义。下面来单纯如是说呵呵这几个状况分别意味着甚么。
untrack
首先是untrack,untrack他们直译就能了。track有轨道以及记录的意思,所以untrack是还没记录。那么甚么样的东西是还没记录的呢?比如说能想到新生儿,刚出生的新生儿英文名字都没有,总之也没有记录在案,所以需要登记呵呵人口。那么在登记之前,就能认为那些新生儿是untrack的。
迁移到开发之中来,他们新建立的文档只不过是系统里的“新生儿”。在他们将它记录在案之前,它的状况是untrack。所以当你在两个git工程项目之中增建了文档的时候,假如你用git status指示去查看git之中的状况,就会看到系统会提示你有些文档状况是untrack。
这里的展示是乱码,是因为我用的中文。这一串乱码是“第三篇”的意思。他们能注意到,在输出的结果最后一行,系统提示他们能用git add指示来track它。那个也是git很人性化的一点儿,很多时候它会提醒他们能采用甚么指示做成甚么样的事情。所以我们千万不要忽视那些日志,里头的信息是很重要的。
modified
下两个说的状况是modified,modified顾名思义是修改过的意思。针对的是已经登记在案的文档最近又发生了改动的情况,也是说他们最近改过了某两个之前已经登记在案的文档,那么当他们查看状况的时候得到的是modified,表示改动了,之前的记录已经不是最新的了,他们需要更新。
同样,他们能通过git status命名来查看modified的情况。
他们看最上方的红字,它说的是“第三篇”那个文档他们已经有了新的改动,能采用git add指示来将它更新,或者是采用git restore指示来取消那个文档的登记信息,也是让他回到“新生儿”的状况。
staged
接留下来如是说的状况是staged,它没有很好的翻译,能大概理解成暂存。也是说他们把所有的改动都记录留下来了,现在git系统之中记录的已经是那个文档最新的状况了。
当他们建立了新的文档,或者是有了新的改动,执行git add之后,得到的状况是staged。那个时候当他们执行git status,就会看到他们当下建立和更新了哪些文档。注意在所有的改动都暂存的情况下,git status是不会出现红色的提示的,只会有绿色生态的提示信息。
总之这里的文字之所以有颜色是因为我采用了zsh这个终端,假如不配置是没有的,就只能看到白色的的文字。zsh那个终端只在Linux和MacOS之中有,windows没有。而win的终端和系统一直被程序员们吐槽难用,建议有条件的同学能研究呵呵Linux,装个虚拟机也好。
当他们终端没有颜色高亮的时候,就只能通过上面的文本来判断了,假如出现了Untracked files或者是Changes to be committed那些提示语不然,说明你还有改动没有同步到git之中来,能通过git add指示完成。
committed
最后讲的两个状况是committed,那个committed表示的已递交。前面说了staged只是暂存,还没有真正递交进git系统之中。只有通过指示git commit之后,才算是真正把暂存区的标识符递交了。经过git commit指示之后,所有被递交的文档的状况是committed。
那个时候假如他们执行git status再来查看,会看到提示nothing to commit, working tree clean.
这就表示他们所有的改动都已经递交进邻近地区的git仓库之中了,以后及时他们不小心删错了标识符,或者是做了一些修改。只要邻近地区的git仓库还在,那些标识符就都还能找得回来。一直到这里为止,他们所有的操作都是离线的,都不需要网络参与。这也是他们前文说的git的两个优点之一。
git commit之后,他们就能通过git push来把邻近地区的改动同步到远程了。总之这一步是肯定需要网络的,并且也可能会遇到很多问题,其中也有很多细节,他们之后再详细展开。
他们用一张图来总结呵呵上面提到四种状况,以及git的整个工作流来加深呵呵印象。
总结
看完了上面有关git状况的如是说之后,想必我们就能明白,他们在采用git的时候,最常用的Bleymard也是git add,git commit以及git push的指示到底是干嘛的了。
git add能把所有的改动,无论是修改的还是增建的都存入暂存区。git commit能将暂存区的改动递交到邻近地区git仓库,最后git push能把邻近地区仓库的改动同步到远端。看起来好像平平无奇对吧,但他们仔细琢磨会发现两个很奇怪的点,那是既然他们git add和git commit都是递交,只不过是递交的目的地不同,两个是暂存区两个是邻近地区仓库。那么为甚么他们不能直接将它合并呢?他们git add是直接递交到邻近地区仓库不行吗?
实际上SVN那个版本控制工具是那么做的,但这有两个问题是当他们递交的时候,它会让他们选择他们要递交的文档。假如改动量小还好,假如改动量很大,他们要手动去两个一个输入需要递交的文档显然是两个非常麻烦的事情。而有了暂存区之后,他们就能在开发的时候,一边开发两个边把文档递交到暂存区,最后直接一起commit到仓库就能了。就能避免最后递交之前的麻烦了,因为反正递交那个操作一定是原子的,要么全部成功,要么全部失败,是不允许部分成功这种情况发生的。
而且很多极客更加讨厌在终端环境之中操作标识符,而不是在两个弹出来的界面里点点点,这会让他们觉得非常不极客(逼格太低)。有了暂存区之后就能很方便地做到这一点儿。
到这里,他们的该文就结束了,感谢您的阅读。相信看完之后,对于git之中的状况以及它的作用应该有了两个基础的了解,并且应该还学到了两个装逼技能,是问你的小伙伴,你晓得为甚么git里有两个暂存区而SVN里没有吗?因为不极客。
衷心祝愿我们每天都有所收获。假如还讨厌今天的文本不然,请来两个三连支持吧~(点赞、在看、转发)
– END –