git subrepo

此文已由做者張磊受權網易雲社區發佈。
html

歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。git

前言

目前對 git 倉庫拆分的已有實現之一,並無合併到 git 發行版中。項目的地址是 https://github.com/ingydotnet/git-subrepogithub


準備工做

  1. 首先建立主倉庫 subrepo-master,隨意提交一次文本,接着拉取到本地web

  2. 創建子倉庫 subrepo 和 subrepo1,隨意提交一次文本數據庫

  3. Windows 安裝稍顯麻煩,經過安裝 Cygwin ,並配置環境解決的。安全


操做

  1. 添加子倉庫fetch

    git subrepo clone <repository> [<subdir>] [-b <upstream-branch>] [-f]  這裏的 repository 能夠用添加的 remote 的別名。子倉庫添加完成,會發現目錄多了一個,並且進去後發現有一個文件 .gitrepo,打開看到記錄了 subrepo 執行的一些信息。同時運行 git log 發現多了一次提交。因爲存在 .gitrepo 文件,就不須要像 git-subtree 同樣每次都要指定 remote url,後續能夠直接用目錄名更新。url

     git subrepo clone (merge) --branch=a subtree1 subtree1
     subrepo:   subdir:   "subtree1"   merged:   "8a62c0e" upstream:   origin:   "subtree1"   branch:   "a"   commit:   "8a62c0e"
     git-subrepo:   version:  "0.4.0"   origin:   "???"   commit:   "???"
  2. 更新子倉庫spa

    對子倉庫遠端作一次修改,而後更新它。git subrepo pull subrepo1,接着運行 git log,會發現這裏像添加子倉庫同樣自動作了一次提交命令行

  3. 修改主倉庫、子倉庫

    對主倉庫、子倉庫作修改並提交,同時修改遠端主倉庫、子倉庫。這裏若是有衝突,修改衝突的地方有點奇怪,是放在 .git/tmp/<dir> 下面,仔細看提示步驟,按照步驟走就能夠順利提交了。不過在這裏也能夠體驗看設計思路,確實有兼容 git-subtree 和 git-submodule。


缺點

  1. 文檔有點少,好在項目還有些活躍

  2. Windows 下安裝麻煩,體驗極差,絕望


優勢

  1. 把官網的羅列搬出來便可(谷歌翻譯+人工),並且只看命令確實挺有吸引力的

    它假定人們與倉庫交互有三個主要角色,並試圖爲他們提供一切服務:

  2. 全部者 - 做者/擁有/維護倉庫的人。

    用戶 - 剛剛使用/安裝倉庫的用戶。

    合做者 - 將代碼提交給倉庫和子倉庫的人員。

    該 git-subrepo 命令經過如下方式爲這些角色帶來好處:

    簡單而直觀的命令行使用。

    用戶只需克隆倉庫就能夠得到倉庫和全部的子倉庫。

    用戶不須要安裝 git-subrepo,永遠。

    合做者不須要安裝,除非他們想 push/pull。

    當一個 subdir 是一個 subrepo(它有一個.gitrepo文件)時,協做者知道。

    爲手動操做生成命名分支和遠程控制。

    業主不處理保持子模塊同步的複雜性。

    Subrepo 存儲庫自己能夠包含 subrepos。

    不一樣的分支能夠在不一樣的狀態有不一樣的 subrepos 等。

    你能夠 init 將現有的子目錄轉換爲子倉庫。

    你的 git 歷史保持清晰。

    上游歷史記錄(clone/pull)被壓縮爲一次提交。

    你能夠看到 subrepo 歷史經過 git log subrepo/<subdir>/fetch。

    推回上游的提交不會被壓縮。

    試錯成本低。

    無需配置。

    不會引入歷史來混淆其餘 git 命令。

    修復已知的 git-subtree 使用 rebase 會失敗的問題。


技巧

  1. 命令表

     git subrepo -h    # Help Overview
    
     git subrepo clone <remote-url> [<subdir>]
     git subrepo init <subdir>
     git subrepo pull <subdir>
     git subrepo push <subdir>
    
     git subrepo fetch <subdir>
     git subrepo branch <subdir>
     git subrepo commit <subdir>
     git subrepo merge-base <branch1> <branch2>
    
     git subrepo status [<subdir>]
     git subrepo clean <subdir>
    
     git subrepo help [<command>]
     git subrepo version


參考

  1. https://github.com/ingydotnet/git-subrepo


免費體驗雲安全(易盾)內容安全、驗證碼等服務

更多網易技術、產品、運營經驗分享請點擊


相關文章:
【推薦】 數據庫路由中間件MyCat - 源代碼篇(4)

相關文章
相關標籤/搜索