做一下搬运工,以下文章来自廖雪峰的官方网站
很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。……Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。……
1. 项目快照
譬如在某个时刻,你分析的SNP数据有14%个位点落在exon位置上,你在文章中使用了这个数据,同时使用git进行提交(commit)。而两个月后当再次回头分析数据,你惊奇地发现26%的SNP落在了这些位置!假如没有版本控制系统,可能就要花费很多时间思考当时的做法(乃至重做,OMG!)。而有了git的版本记录,我们可以回滚到记录百分比的那个程序节点,再比较发生变化的代码。
除了能快速修正bug,作者也举例说明了git快照的另一作用:设想你用铅笔记录每次PCR实验的结果,而实验产生新的结果后你又在原来的基础上修改了结果。所以,假如没有合理的版本控制,你的代码和结果会及其混乱!
2. 及时记录代码的重要改变
比如开发算法或软件,新功能的增加、bug的修正后都需要及时分享,以防错误的蔓延。Git不仅能够帮助开发人员记录重大变换,更能够通过github或bitbucket这些软件共享仓库进行大范围共享。
3. 提供更方便简洁的记录
当实验室人员变动的时候(特别是生信人员),假如代码没有好好整理势必会给后来的人们造成很多可以预见的麻烦:散乱的目录、混杂乃至不可重复的结果、大量重复却毫无意义的代码……总之。使用git来记录项目进度、结果,有利于精确回溯和总结,有事半功倍之效。
repository:存储文件的最基本单元。可以通过git init/clone 创立
branch: git里用版本切换。通过git status 查看当前分支的位置
tracked/untracked:形容文件状态。顾名思义即跟踪,untracked即为没备案的文件
1. 起始设置
# Installing Git (Ubuntu)
sudo apt-get install git
# 设置用户
git config --global user.name ''Sewall Wright''
git config --global user.email ''swright@adaptivelandscape.org''
# 设置颜色参数
git config --global color.ui true
# Creating Repositories
cd yourDir
git init
# Clone from remote repositories, seqtk as example
git clone git://github.com/lh3/seqtk.git
2. 文件记录过程:add到commit git 中最重要的过程就是add,查看的方式则是status。记录过程主要分成两个步骤:
Tracking: git status
是最常用的命令,会返回给我们git当前所在的分支以及尚未记录到快照里的的文件信息。当我们进行每个操作之后都可以用这个语句查看一下当前的状态。
Staging: 对于初学git的小伙伴而言,可能这就是最需要记住的差异:git add之后对文件操作后的改变不能被提交,这就出现了staging一词(个人觉得可以翻译成”阶段“,在这个阶段后的东西都不记录在案)。 在add之后执行记录的功能通过 git commit
实现,这个过程中我们需要写一个commit message,用于说明产生的相应改变。 理想的commit有助于项目运行,所以需要时刻注意snapshot的紧凑性和明确性,比如 “new counting feature added” or “fixed bug that led to incorrect transla‐ tion。 其他功能
查看文件前后差异: git diff
, --staged
查看各种commit历史: git log
直接提交删除和改变: git mv
和 git rm
在对应仓库的目录创建一个 .gitigonore
文件夹用于记录不需要备份的目录,比如数据文件很大的目录,中间文件等等。可以参照github对gitignore的设置建议
撤销修改,回到某个commit: git reset
版本回退: git checkout
和 git stash
3. 使用git合作:push 和 pull 最后,除了本地化使用之外,多人合作的项目则需要创建共享仓库,比如在github上的共享,在廖雪峰的官方网站上有git远程仓库相关设置的教程,内容翔实,可供参考。
4. 分支 就个人项目而言,分支使用频率较低。简而言之,分支就是超前于master(主干)的开发版本(也就是常见的dev啦)。比如用jekyll实现的github博客,需要的分支就是gh-pages。
Scott Chacon and Ben Straub’s Pro Git book. 电子版在这里哟:https://git-scm.com/book/en/v2
最后,祝大家儿童节快乐!今天开组会热爱科研的老板告诉我们,要像孩子那样永远保持对未知事物的好奇心,不停探索!
下期预告: Chapter 6. bioinformatics data
联系客服