学Git,为自己

今天是生信星球陪你的第223天

大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

豆豆写于18.12.18-19

了解到Git其实就是因为很红的Github,但Git包含的东西比Github多多了。Git的魔力一直吸引着我,但目前还是只看到了Git的冰山一角,再次接触希望有新收获。这两天写的东西有点多,所以我决定分两次来推送

关于设定

开始使用git,先要设置使用者的email和名称,比如在终端中输入

可以用查看当前的设定

当然使用是针对整个环境来讲,如果想要根据不同的项目设定不同作者,就可以在项目目录下替换为设定

我们都知道,工程师的美德之一就是懒惰,抛弃重复性工作,因此可以设置一些快捷方式帮助git更快处理

与文本编辑器无缝连接

我们都希望git可以直接在终端中打开编辑器如Sublime或者VS code,进行代码编写,然后直接上传到github备份。于是可以找到sublime的安装目录,在它的 目录下有一个 ,然后编辑 【针对mac环境】,添加 就好。之后就可以利用 在terminal中直接用Sublime打开相应的代码了

少打重复的字或者少打错字

设置缩写是比较不错的选择,例如:

当然,这些都可以在中进行修改

全新的开始

第一次使用最重要的就是 ,想对哪个目录进行版本控制(简称“版控”),就在哪个目录下进行该操作,结果就是在该目录下生成了的隐藏目录。

别看我们平时看不到它,它可储存了整个Git的精华(也许正因如此,才让目录隐藏,避免用户删除)。因此,如果有一天,我们不想对这个目录进行版控了,那么只需要移除目录就好

豆知识 Doodle Tip:针对mac系统,建议练习文件都放在一个名为/tmp的目录下进行,这个目录有个最大的好处:在电脑重启后里面的东西都会被清空,不需要手动清理。但是,切记,重要内容不要放在这个目录下

文件放心交给Git吧

以下内容都是作为新手的我踩过的坑,并且不止一次踩过,以至于多个文件丢失,好在不是什么重要的。后来结合搜索的知识总结了一些重点,感觉还是很有用的

先把文件添加进暂存区

首先看看这个命令,它是用来查询目录当前的状态,如果是一个新的目录执行这个指令,会返回 表示当前没有什么东西可以提交;

但是如果新建了一个文件,那么就会提示,就是说这个文件还没有被加入Git版控系统中,并没有被Git正式追踪,仅仅是检查到有这个东西;

我们有了文件,下面就是把新建的文件交给Git,让它来管理、追踪,也就是使用 + 文件名称或整个目录,随后不会提示任何信息,但是可以再次使用来查看当前状态。

只要后,文件的状态就会变成,而不再是,表示此时文件被放在了暂存区(Staging Area),随后看看有没有一起做伴的,去到储存库中。

豆问题1:如果在git add之后,我们又修改了文件的内容,会发生什么?

【例如:我们之前新增一个文件叫,然后我们使用将文件添加到暂存区,突然想起来有个地方需要修改,于是又在终端中修改了】

作为刚接触Git的我们,一般会在修改完直接提交,把刚做的修改保存下来(因为默认commit命令是时刻跟随我们的脚步的,我们修改到哪里,它就帮我们保存到哪里。其实并不是,它并没有这么智能,还是需要我们的指令)

回到上面的问题,我们对文件做了修改,再一下(这里是不是就发现了:最常用的是status命令,我们是需要时刻提醒的,自己做到了哪一步)。得到的结果就变成了两个文件了,一个,一个 。

这里的原因就是:我们在第二步添加文件到暂存区是没错的,Git也帮我们记录下来了;但是问题出现在重新编辑后,这里编辑的内容其实并没有再次被加入暂存区。因此,实际上暂存区的内容还是我们刚才第二步加入的原始内容

当然,也不是不能保存修改。如果确认无误,可以再次使用,将修改后的文件添加到暂存区

豆问题2:在添加文件时,如果想全部添加,是使用还是呢?

这二者在git 2.0以上版本中确实都表示全部文件;但是还有有其他的差别,例如在git主目录下有这几个目录,其中main.css和index.html都做了改动。如果在根目录下执行,那么这两个改动的文件都会被放如暂存区;但是如果在css目录下执行,那么就只有mian.css会被放入暂存区。

但是,我们用就不用担心这个问题,因为即便是在css目录下执行这个操作,还是会把两个修改文件都加入

再从暂存区提交到仓库中

上面的一大段文字都是在描述:如何将文件加入暂存区,但是仅仅这样是不够的。暂存暂存,顾名思义它不会长久。如果想让暂存区的东西永久保存下来,我们还需要用到

一般用法就是: ,其中的以及后面的字符都是在说明:你在这次commit的操作中干了啥。比如第一次提交这个文件就可以用,简单清楚,让别人和自己都能看懂就行,不限中英文。

这个操作结束后,Git就把暂存区的东西储存到了仓库(Repository)中,也就是说:我Git完成了一个文件的存档/备份,也就是做了第一份的版本建立。

直到Commit结束,才算完成了整个流程!

关于commit,还有一点知识需要了解:

Commit到底做了啥?

其实它就是负责了暂存区的东西,也就是说,我们在执行的时候,那些没有添加到暂存区中的档案,就不会被Commit到仓库中

另外,可不可以不加以及后面的啰嗦话?

答案是:不能!因为没有这个看似啰嗦,实际非常有用的语句,Git是不会允许你完成Commit的操作的。并且添加的话,那些模糊的话就不用加了,比如,我们就是想看shoot了什么trouble,这个重要的问题需要指出,例如可以 ,表示改正了12号错误

Commit可不可以提交“空”?

因为在R里,空也是被当成字符来处理的(虽然很绕,它为空,应该没东西,但却还占据着位置)。那么Commit其实也是可以的,但是除了作演示Git的合并以外一般没啥用,可以使用 提交一个“空”文档,然后描述就是“empty”

三大重要空间

Git中的三大重要空间就是:工作区(Working directory)、暂存区(Staging area)、仓库(Repository),它们的关系是:

那么就有一个问题:难道所有的流程都要通过、后才能完成吗?能不能简化流程?

其实可以在commit的时候加上一个参数,如: ,但是这个参数只对已经在仓库中的文件有效,对新加入的文件(即Untracked)的文件无效

其实用分段式管理还是不麻烦的,并且对所有文件通用:可以想象有个仓库,仓库门口是个中转站,中转站上有货物有进有出,要存放到仓库的货物可以先放到中转站(git add),然后等待货物达到一定数量了,就打开仓库门,把中转站的货物一起运进仓库(git commit),并且对每一批货物都做好记录(干嘛的、谁送的)

为什么要攒一段时间再开一次仓库门呢?

其实来一件货物开一次门是可以的,但是问题就是记录次数太多,让Commit记录变得太零散,如果让别人看的时候,大家希望看到一个比较完整的内容,而不是一个Commit接着一个看

因此,问题又来了:什么时候选择进行Commit比较好?

没什么硬性规定,当完成一个任务时或者一天紧张的工作学习时光结束时,可以备份也作为记录

保持看记录的习惯

回顾一般的操作流程:

查看之前的记录是用 ,其中会包含几项重要信息

Commit作者是谁

什么时候进行的commit

每次Commit都做了什么

另外,还会看到 这种信息,看似乱码,其实是非常关键的内容:它其实是SHA-1 (Secure Hash Algorithm 1)演算得到的结果,特点就是重复率极低,因此可以当做Commit的ID号【一般使用6-8位就足以区分不同的Commit了】

当然,如果在后加上,结果就会变得更精简,一次显示的结果更多

利用log信息,我们可以做的事情可以包括:

查找某个人的Commit(团队协作中很重要)

查找包括某个字符的

还可以对Commit的文件进行查找,比如想找提到“生信星球”的文件

查询历史资料时,可以限定时间

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181219G12JH400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券