標籤:

Bioinformatic Data Skills 學習專題(4) git

git: 高級的項目日誌工具

做一下搬運工,以下文章來自廖雪峰的官方網站

很多人都知道,Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的伺服器系統軟體了。……Linus花了兩周時間自己用C寫了一個分散式版本控制系統,這就是Git!一個月之內,Linux系統的源碼已經由Git管理了!牛是怎麼定義的呢?大家可以體會一下。Git迅速成為最流行的分散式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。歷史就是這麼偶然,如果不是當年BitMover公司威脅Linux社區,可能現在我們就沒有免費而超級好用的Git了。……

論git在生信項目中的重要性

1. 項目快照

譬如在某個時刻,你分析的SNP數據有14%個位點落在exon位置上,你在文章中使用了這個數據,同時使用git進行提交(commit)。而兩個月後當再次回頭分析數據,你驚奇地發現26%的SNP落在了這些位置!假如沒有版本控制系統,可能就要花費很多時間思考當時的做法(乃至重做,OMG!)。而有了git的版本記錄,我們可以回滾到記錄百分比的那個程序節點,再比較發生變化的代碼。

除了能快速修正bug,作者也舉例說明了git快照的另一作用:設想你用鉛筆記錄每次PCR實驗的結果,而實驗產生新的結果後你又在原來的基礎上修改了結果。所以,假如沒有合理的版本控制,你的代碼和結果會及其混亂!

2. 及時記錄代碼的重要改變

比如開發演算法或軟體,新功能的增加、bug的修正後都需要及時分享,以防錯誤的蔓延。Git不僅能夠幫助開發人員記錄重大變換,更能夠通過github或bitbucket這些軟體共享倉庫進行大範圍共享。

3. 提供更方便簡潔的記錄

當實驗室人員變動的時候(特別是生信人員),假如代碼沒有好好整理勢必會給後來的人們造成很多可以預見的麻煩:散亂的目錄、混雜乃至不可重複的結果、大量重複卻毫無意義的代碼……總之。使用git來記錄項目進度、結果,有利於精確回溯和總結,有事半功倍之效。

Git入門

基礎:建立倉庫、文件記錄、提交任務

幾個概念預熱:

  • repository:存儲文件的最基本單元。可以通過git init/clone 創立

  • branch: git里用版本切換。通過git status 查看當前分支的位置

  • tracked/untracked:形容文件狀態。顧名思義即跟蹤,untracked即為沒備案的文件

  • 1. 起始設置

    1. # Installing Git (Ubuntu)

    2. sudo apt-get install git

    3. # 設置用戶

    4. git config --global user.name ""Sewall Wright""

    5. git config --global user.email ""swright@adaptivelandscape.org""

    6. # 設置顏色參數

    7. git config --global color.ui true

    8. # Creating Repositories

    9. cd yourDir

    10. git init

    11. # Clone from remote repositories, seqtk as example

    12. 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 mvgit rm

  • 在對應倉庫的目錄創建一個.gitigonore文件夾用於記錄不需要備份的目錄,比如數據文件很大的目錄,中間文件等等。可以參照github對gitignore的設置建議

  • 撤銷修改,回到某個commit:git reset

  • 版本回退:git checkoutgit 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

    推薦閱讀:

    考古與古史重構||郭靜雲《夏商周:從神話到史實》評介(專題一)
    伴隨你一生的人生七大信條?(教練專題六十四)
    【專題吟詠】母親節
    成年人改名專題研究--周神松
    改正錯別字專題複習

    TAG:學習 | 專題 |