• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    alphafold2培训

    alphafold2培训

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      alphafold2培训

      alphafold2培训

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      生信星球

      • 首页
      • 博客
      • 生信星球
      • 学Git,为自己(上篇)

      学Git,为自己(上篇)

      • 发布者 weinfoeditor
      • 分类 生信星球
      • 日期 2018年12月19日
      测试开头

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


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

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

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


      豆豆写于18.12.18-19

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

      关于设定

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

       git config --global user.name "Bioplanet"
       git config --global user.email "Bioplanet520@outlook.com"

      可以用git config --list查看当前的设定

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

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

      • 与文本编辑器无缝连接
        我们都希望git可以直接在终端中打开编辑器如Sublime或者VS code,进行代码编写,然后直接上传到github备份。于是可以找到sublime的安装目录,在它的bin 目录下有一个subl ,然后编辑bash_profile 【针对mac环境】,添加export PATH=$PATH:/Applications/Sublime Text.app/Contents/SharedSupport/bin 就好。之后就可以利用subl FILE 在terminal中直接用Sublime打开相应的代码了

      • 少打重复的字或者少打错字
        设置缩写是比较不错的选择,例如:

        git config --global alias.co checkout
        git config --global alias.br branch
        git config --global alias.st status
        git config --global alias.l "log --oneline --graph"

        当然,这些都可以在~/.gitconfig中进行修改


      全新的开始

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

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

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


      文件放心交给Git吧

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

      先把文件添加进暂存区

      首先看看git status这个命令,它是用来查询目录当前的状态,如果是一个新的目录执行这个指令,会返回nothing to commit 表示当前没有什么东西可以提交;
      但是如果新建了一个文件,那么就会提示Untraced files,就是说这个文件还没有被加入Git版控系统中,并没有被Git正式追踪,仅仅是检查到有这个东西;

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

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

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

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

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

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

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

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

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

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

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

      学Git,为自己(上篇)

      再从暂存区提交到仓库中

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

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

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

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

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

      • Commit到底做了啥?

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

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

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

      • Commit可不可以提交“空”?

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


      三大重要空间

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

      学Git,为自己(上篇)

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

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

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

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

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

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

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


      保持看记录的习惯

      回顾一般的操作流程:

      touch a.txt                              # 建立文件 a.txt   
      git add a.txt                              # 把 a.txt  加进暂存区
      git commit -m "first submit"             # 进行 Commit

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

      • Commit作者是谁

      • 什么时候进行的commit

      • 每次Commit都做了什么

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

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

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

      • 查找某个人的Commit(团队协作中很重要)
        git log --oneline --author="doodle"

      • 查找包括某个字符的
        git log --oneline --grep="btw"

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

      • 查询历史资料时,可以限定时间
        git log --oneline --since="9am" --until="5pm" --after="2018-12"




      点击底部的“阅读原文”,获得更好的阅读体验哦😻

      初学生信,很荣幸带你迈出第一步。

      我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到Bioplanet520@outlook.com,每一条都会看到的哦~


      学Git,为自己(上篇)


      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoeditor

      上一篇文章

      系统了解一下基因表达与芯片知识
      2018年12月19日

      下一篇文章

      学Git,为自己(下篇)
      2018年12月21日

      你可能也喜欢

      8-1651673488
      生信零基础入门学习小组长期报名中(2022仍继续)
      7 4月, 2022
      2-1651673738
      简化版的ROC曲线
      21 2月, 2022
      8-1651674718
      支持向量机模型
      19 11月, 2021

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      白介素-17受体信号的自主激活,维持炎症并促进疾病进展
      048月2023
      MCT4依赖的乳酸分泌抑制LKB1缺陷肺腺癌的抗肿瘤免疫
      187月2023
      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?