在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>數值算法/人工智能>

pygitd的代碼編寫過程

大小:0.8 MB 人氣: 2017-09-30 需要積分:1

  “pygit是一個大約500行Python代碼工具,實現了一些git功能,包括創建庫、將文件添加到索引、提交、將自身推送到GitHub上去。 本文給出了一些代碼編寫過程,并詳細介紹了相關代碼。”

  Git因其具有非常簡單的對象模型而著稱。在學習git時,我發現本地對象數據庫只是.git目錄中的一堆普通文件。除了索引(.git/index)和打包文件(可有可無)外,這些文件的存放規則和格式相當的簡單。

  受Mary Rose Cook的程序啟發,我也想看看是否能夠編寫出創建倉庫,執行提交,并推送到服務器(比如GitHub)的git客戶端。

  Mary的gitlet程序有著很多可供學習的地方,而我的程序需要把自身推送到GitHub上去,所以具有更多的創新功能。在某些方面,她實現了更多的Git功能(包括基本的合并),但在其他方面實現的功能就比較的少。例如,她使用了一個簡單的基于文本的索引格式,而不是用git使用的二進制格式。此外,雖然她的gitlet支持推送,但它只會推送到本地已經存在的倉庫中,而不是到遠程服務器上。

  對于本文涉及的這個練習,我打算編寫一個可以執行所有步驟的版本,包括推送到一個真正的Git服務器上去。我也會使用與git相同的二進制索引格式,這樣,我就可以在每一步驟上都使用git命令來檢查程序的功能。

  我的程序叫pygit,用Python(3.5+)編寫,并且只使用了標準庫模塊。它只有500行代碼,包括空白行和注釋。我至少需要實現init、add、commit和push命令,但pygit還實現了status,diff,cat-file,ls-files和hash-object等命令。后面的命令,本身也非常有用,并且在調試pygit的時候,也起到了幫助作用。

  下面,讓我們來看看代碼吧!您可以在GitHub上查看pygit.py的所有代碼,或者在下文中跟著我一起瀏覽各段代碼。

  初始化倉庫

  初始化本地Git倉庫只需要創建.git目錄以及目錄下的幾個文件和子目錄即可。在定義了read_file和write_file這兩個幫助函數之后,我們就可以編寫init()了:

  pygitd的代碼編寫過程

  你可能注意到這段代碼里沒有進行優雅的錯誤處理。畢竟這整個代碼只有500行啊。如果倉庫目錄已經存在,程序會終止,并拋出traceback。

  取對象的散列值

  hash_object函數用來獲取單個文件對象的散列值,并寫入.git/objects目錄下的“數據庫”中。在Git模型中,包含三種對象,分別是:普通文件(blob),提交(commit)和樹(tree,也就是目錄結構)。

  每個對象都有一個文件頭,包括文件類型和文件大小,大概幾個字節的長度。之后是NUL字符,然后是文件的數據內容。所有這些都使用zlib壓縮并寫入到文件.git/objects/ab/cd…中,其中ab是40個字符長的SHA-1散列的前兩個字符,而cd…則是剩余的部分。

  請注意,這里使用了Python標準庫(os和hashlib)。

  pygitd的代碼編寫過程

  還有個find_object()函數,它通過散列(或散列前綴)找到某個文件對象,然后用read_object()函數讀取這個對象及其類型。這實際上是hash_object()的反向操作。最后,cat_file是一個與git cat-file具有相同功能的pygit函數:它將對象的內容(或者大小和類型)進行格式化并打印到標準輸出。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 一级无毛片| 欧美一级免费观看| 成人精品在线观看| 国产精品黄页网站在线播放免费| 色多多免费视频| 色狠狠狠色噜噜噜综合网| 精品国产1000部91麻豆| 男女免费观看视频| 精品国产成人三级在线观看| 中国一级特黄真人毛片| 亚洲精品视频区| 色天使久久| 久久一级毛片| 午夜三级毛片| 最新地址四虎www4hutv| 一级欧美在线的视频| 国产精品久久久香蕉| 曰本a| 国色天香精品亚洲精品| 亚洲国产成人精彩精品| 日韩免费三级| 深爱婷婷激情网| 午夜老司机福利| 日本视频www色| 欧美综合在线视频| 黄色大片三级| 国产毛片一区二区三区精品| swag系列国产精品| 国产精品15p| 五月天欧美| 国产精品毛片天天看片| 黄网观看| 中文字幕精品一区| 亚洲黄色小视频| 免费一级欧美片片线观看| 俺去啦最新网址| 成年女人在线观看| 日本加勒比视频在线观看| 天天插插插| 色135综合网| 亚洲免费人成在线视频观看|