做一下搬運工,以下文章來自廖雪峰的官方網站
很多人都知道,Linus在1991年創(chuàng)建了開源的Linux,從此,Linux系統(tǒng)不斷發(fā)展,已經成為最大的服務器系統(tǒng)軟件了?!璍inus花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng),這就是Git!一個月之內,Linux系統(tǒng)的源碼已經由Git管理了!牛是怎么定義的呢?大家可以體會一下。Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年,GitHub網站上線了,它為開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。歷史就是這么偶然,如果不是當年BitMover公司威脅Linux社區(qū),可能現(xiàn)在我們就沒有免費而超級好用的Git了?!?/p>
1. 項目快照
譬如在某個時刻,你分析的SNP數據有14%個位點落在exon位置上,你在文章中使用了這個數據,同時使用git進行提交(commit)。而兩個月后當再次回頭分析數據,你驚奇地發(fā)現(xiàn)26%的SNP落在了這些位置!假如沒有版本控制系統(tǒng),可能就要花費很多時間思考當時的做法(乃至重做,OMG?。6辛薵it的版本記錄,我們可以回滾到記錄百分比的那個程序節(jié)點,再比較發(fā)生變化的代碼。
除了能快速修正bug,作者也舉例說明了git快照的另一作用:設想你用鉛筆記錄每次PCR實驗的結果,而實驗產生新的結果后你又在原來的基礎上修改了結果。所以,假如沒有合理的版本控制,你的代碼和結果會及其混亂!
2. 及時記錄代碼的重要改變
比如開發(fā)算法或軟件,新功能的增加、bug的修正后都需要及時分享,以防錯誤的蔓延。Git不僅能夠幫助開發(fā)人員記錄重大變換,更能夠通過github或bitbucket這些軟件共享倉庫進行大范圍共享。
3. 提供更方便簡潔的記錄
當實驗室人員變動的時候(特別是生信人員),假如代碼沒有好好整理勢必會給后來的人們造成很多可以預見的麻煩:散亂的目錄、混雜乃至不可重復的結果、大量重復卻毫無意義的代碼……總之。使用git來記錄項目進度、結果,有利于精確回溯和總結,有事半功倍之效。
repository:存儲文件的最基本單元。可以通過git init/clone 創(chuàng)立
branch: git里用版本切換。通過git status 查看當前分支的位置
tracked/untracked:形容文件狀態(tài)。顧名思義即跟蹤,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當前所在的分支以及尚未記錄到快照里的的文件信息。當我們進行每個操作之后都可以用這個語句查看一下當前的狀態(tài)。
Staging: 對于初學git的小伙伴而言,可能這就是最需要記住的差異:git add之后對文件操作后的改變不能被提交,這就出現(xiàn)了staging一詞(個人覺得可以翻譯成”階段“,在這個階段后的東西都不記錄在案)。 在add之后執(zhí)行記錄的功能通過 git commit
實現(xiàn),這個過程中我們需要寫一個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
在對應倉庫的目錄創(chuàng)建一個 .gitigonore
文件夾用于記錄不需要備份的目錄,比如數據文件很大的目錄,中間文件等等??梢詤⒄誫ithub對gitignore的設置建議
撤銷修改,回到某個commit: git reset
版本回退: git checkout
和 git stash
3. 使用git合作:push 和 pull 最后,除了本地化使用之外,多人合作的項目則需要創(chuàng)建共享倉庫,比如在github上的共享,在廖雪峰的官方網站上有git遠程倉庫相關設置的教程,內容翔實,可供參考。
4. 分支 就個人項目而言,分支使用頻率較低。簡而言之,分支就是超前于master(主干)的開發(fā)版本(也就是常見的dev啦)。比如用jekyll實現(xiàn)的github博客,需要的分支就是gh-pages。
Scott Chacon and Ben Straub’s Pro Git book. 電子版在這里喲:https://git-scm.com/book/en/v2
最后,祝大家兒童節(jié)快樂!今天開組會熱愛科研的老板告訴我們,要像孩子那樣永遠保持對未知事物的好奇心,不停探索!
下期預告: Chapter 6. bioinformatics data
聯(lián)系客服