【嵌入式開發 Linux 常用命令系列 4.2 -- .repo 各個目錄介紹】

文章目錄

    • 概述
    • .repo 目錄結構
    • manifests/default.xml
      • Manifest 文件的作用
      • default.xml 文件內容示例
        • linkfile 介紹
    • .repo/projects 子目錄
        • 配置和管理
        • config
          • HEAD
          • hooks
          • info/exclude
          • objects
          • rr-cache
      • 工作區中的對應目錄

概述

repo 是一個由 Google 開發的版本控制工具,它建立在 Git 之上,用于管理多個 Git 倉庫的工作。它經常被用于管理大型項目,如 Android 操作系統開發,其中涉及許多單獨的 Git 倉庫。repo工具使得在這些倉庫之間進行協調、同步和提交變得更加簡單。

在使用 repo 初始化一個工作區(workspace)后,會創建一個名為 .repo 的隱藏目錄。這個目錄包含了 repo 工具運行所需的配置文件和腳本。.repo 目錄的結構對于理解 repo 如何管理多個 Git 倉庫很重要。

.repo 目錄結構

.repo 目錄通常包含以下子目錄和文件:

  • manifests/:包含了 manifest 文件,這些 XML 文件定義了項目中所有倉庫的配置,如遠程倉庫的URL、分支、路徑等。
  • manifests.git/:一個 Git 倉庫,包含 manifests 目錄中的所有 manifest 文件的版本歷史。
  • projects/:包含了所有被 repo 管理的 Git 倉庫的實際內容。每個倉庫在這個目錄中有其對應的子目錄。

manifests/default.xml

.repo/manifests/default.xml 是一個核心文件,它定義了項目的默認 manifest(清單)。Manifest 文件是用 XML 格式編寫的,并且描述了項目的倉庫配置,包括哪些倉庫應該被包含在項目中、倉庫的遠程地址、要檢出的分支、路徑以及任何特定的版本信息。

Manifest 文件的作用

Manifest 文件指導 repo 工具如何初始化和同步項目中的各個倉庫。這個文件告訴 repo

  • 哪些遠程倉庫需要被克隆(包括遠程倉庫的URL)。
  • 各個倉庫應該檢出哪個分支
  • 各個倉庫在本地工作區中的相對路徑
  • 如果有必要,固定特定的提交或標簽
  • 包含其他 manifest 文件(如有)以組織或繼承配置。

default.xml 文件內容示例

一個典型的 default.xml 文件內容可能如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<manifest> <remote name="origin" fetch="https://example.com/" /> 
<default revision="master" remote="origin" sync-j="4" /> <project path="libraries/Library" name="Library.git" /> <project path="apps/App" name="App.git" /> 
</manifest> 

在上述示例中:

  • <remote> 元素定義了一個遠程倉庫的名稱和 URL。在這個例子中,有一個名為 origin 的遠程倉庫,其基礎 URL 為https://example.com/
  • <default> 元素設置了所有項目的默認配置,例如默認的 revision(分支或標簽),在這里是 master,默認的遠程倉庫 remote 是之前定義的 origin,以及 sync-j 參數,它指定了同步操作中并行下載的數量,這里是 4
  • <project> 元素定義了具體要包含在工作區中的倉庫。每個項目都有一個 path,指定了倉庫在本地工作區中的位置,以及 name,指定了遠程倉庫的名稱。在這個例子中,包括了 Library.gitApp.git 兩個倉庫,它們分別位于工作區中的 libraries/Libraryapps/App 路徑下。

當運行 repo init 命令時,repo 會使用 .repo/manifests/default.xml 文件(或者如果指定了其他文件,則使用該文件)來初始化項目。之后,當運行 repo sync 命令時,repo 將根據 manifest 文件中的配置同步項目的所有倉庫。

default.xml 只是一個默認的 manifest 文件名稱。在不同的項目中,可能會有不同的 manifest 文件用于不同的目的,例如維護多個產品線或分支。可以通過 repo init -m 命令來指定使用特定的 manifest 文件。

linkfile 介紹

` 元素用來創建符號鏈接,即在文件系統中的一個位置創建指向另一個位置的引用。這在組織和訪問文件時非常有用,尤其是當你希望在不復制文件的情況下,在項目的不同部分之間共享文件或目錄時。

<linkfile>src(source,源)屬性指定了鏈接的源文件或目錄的路徑,而 dest(destination,目標)屬性指定了要創建符號鏈接的目標路徑。src 路徑是相對于包含該 <linkfile> 標簽的 <project> 目錄的,而 dest 路徑則是相對于工作區的根目錄的。

假設我們有以下的 manifest 文件片段:

<manifest> <project path="apps/App1" name="App1.git"> <linkfile src="shared/config.xml" dest="config.xml" /> </project> <project path="apps/App2" name="App2.git"> <linkfile src="shared/config.xml" dest="config.xml" /> </project> 
</manifest> 

在這個例子中:

  • 我們有兩個項目,App1.gitApp2.git,它們都位于 apps 目錄下的不同子目錄中。
  • 在每個項目中,我們希望有一個符號鏈接,指向共享的 config.xml 文件。假設這個共享文件位于每個項目目錄下的 shared 子目錄中。
  • <linkfile> 標簽定義了從 shared/config.xml(源)到 config.xml(目標)的符號鏈接。對于 App1,這將在 apps/App1 目錄下創建一個指向 apps/App1/shared/config.xmlconfig.xml 符號鏈接。對于 App2,也是類似的情況。

當你執行 repo sync 命令時,repo 工具會處理 manifest 文件中的 <linkfile> 指令,并在對應的位置創建符號鏈接。

.repo/projects 子目錄

.repo/projects/ 子目錄內包含了每個被檢出 Git 倉庫的具體數據。當你使用 repo sync 命令同步項目時,repo 會根據 manifests 中的配置檢出正確的版本到這些子目錄中。

例如,如果你的項目包含了名為 LibraryApp 的兩個 Git 倉庫,那么 .repo/projects/ 目錄可能如下所示:

.repo/projects/ 
Library.git/ 
App.git/ 

這里的 Library.gitApp.git 目錄分別對應它們的 Git 倉庫,而 .git 后綴表示它們是裸倉庫(bare repositories),即不包含工作目錄的 Git 倉庫。

配置和管理
.repo/projects/device.git$ ls
branches  COMMIT_EDITMSG  config  description  FETCH_HEAD  HEAD  hooks  index  info  logs  MERGE_RR  objects  
ORIG_HEAD  packed-refs  refs  rr-cache
config

config 文件包含了特定 Git 倉庫的配置設置。這些設置可能包括遠程倉庫的URL、分支信息、合并策略、鉤子腳本路徑等。在 repo 管理的項目中,部分配置會由 repo 工具自動設置。

HEAD

HEAD 文件是一個引用(ref),指向當前的工作分支或提交。當你在工作目錄中執行檢出(checkout)操作時,HEAD 會更新為指向新的活動分支或提交。它是 Git 用來知道當前工作狀態的重要指標。

hooks

hooks 目錄包含 Git 鉤子(hooks)腳本。這些腳本是在執行特定 Git 命令(如 commit, push, receive 等)時自動運行的。repo 可能會使用這些鉤子來執行額外的操作,比如在提交前進行代碼風格檢查或在推送后觸發持續集成(CI)流程。

info/exclude
  • 作用: exclude 文件類似于 .gitignore 文件,但它是特定于一個倉庫的本地配置。它用于排除(忽略)特定的文件或目錄,使這些條目不被 Git 跟蹤。這些排除規則僅在本地有效,不會隨著倉庫一起被提交或同步。
objects
  • 作用: objects 目錄是 Git 對象數據庫的存放地,其中包含了所有的 Git 對象,如提交(commits)、樹(trees)、blobs(文件內容)和標簽(tags)。這些對象以一種特殊的格式存儲,使 Git 能夠快速檢索和管理版本歷史。
rr-cache

rr-cache 目錄是 “Reused Recorded” 緩存的一部分,它是 Git 用來優化補丁應用(如合并和復制操作)的特征。Git 會在這個目錄中保存曾經計算過的補丁結果,以便在將來的操作中重用,從而加快處理速度。

工作區中的對應目錄

雖然 .repo/projects/ 中包含了 Git 倉庫的數據,但工作區的頂層目錄下通常還會有與這些倉庫對應的目錄。這些目錄是從 .repo/projects/ 中的裸倉庫檢出的工作目錄。repo 會設置 Git 的 worktree 路徑,使得這些工作目錄能夠與 .repo/projects/ 中的裸倉庫關聯。

例如,你可能會在工作區的根目錄下看到如下結構:

Library/ 
App/ 

在這里,Library/App/ 目錄是從 .repo/projects/Library.git/.repo/projects/App.git/ 中檢出的,你可以在這些目錄中編輯文件,然后使用 Git 和 repo 命令來提交更改。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209025.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209025.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 OMSA 和 OME 工具管理多個服務器

文章目錄 Dell Remote Access Controller (iDRAC)OpenManage Server Administrator&#xff08;OMSA&#xff09;OpenManage EnterpriseSupportAssist Enterprise推薦閱讀 在DELL服務器的管理工具中&#xff0c;有多個管理工具&#xff0c;今天我們將分享這幾個工具的關聯性以及…

2023-12-08 工作心得

1 別名不能作為 同一個sql里的where里條件約束 因為別名是在查詢結果生成后才得到的&#xff0c;而 WHERE 子句是在查詢結果生成前進行的篩選操作&#xff0c;所以別名不能直接用于 WHERE 子句中的條件篩選。 2 jpa sql里如果是刪除或修改&#xff0c;加注解 modifying transa…

STM32的幾個深入功能

STM32的幾個深入功能 目錄 1、時鐘源2、鎖相環3、備份SRAM4、low power mode5、DMA Flash RAM6、復位類型7、CMSIS8、STM32F4學習方法9、中斷10、8080 并行接口11、FSMC12、ADC13、IIC14、SPI15、48516、CAN17、MPU6050六軸傳感器18、NRF24L01 2.4G無線模塊19、FLASH20、外部SR…

【Git系列】branch和tag

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

將單體應用程序遷移到微服務

多年來&#xff0c;我處理過多個單體應用&#xff0c;并將其中一些遷移到了微服務架構。我打算寫下我所學到的東西以及我從經驗中用到的策略&#xff0c;以實現成功的遷移。在這篇文章中&#xff0c;我將以AWS為例&#xff0c;但基本原則保持不變&#xff0c;可用于任何類型的基…

云原生系列1

1、虛擬機集群環境準備 VirtualBox類似vmware的虛擬化軟件&#xff0c;去官網https://www.virtualbox.org/下載最新版本免費的&#xff0c;VirtualBox中鼠標右ctrl加home跳出鼠標到wins中。 VirtualBox安裝步驟 https://blog.csdn.net/rfc2544/article/details/131338906 cent…

微信小程序:button微信開放能力打開客服會話分享到聊天框

文檔 https://developers.weixin.qq.com/miniprogram/dev/component/button.html 打開客服會話 按鈕關鍵屬性 open-type"contact"功能按鈕 <button class"mo-open-type"open-type"contact"> </button>分享 <button class&q…

Hive HWI 配置

前言 1、下載安裝好hive后&#xff0c;發現hive有hwi界面功能&#xff0c;研究下是否可以運行&#xff0c;于是使用hive –service hwi命令啟動hwi界面報錯。 啟動hwi功能 2、訪問192.168.126.110:9999/hwi&#xff0c;發現訪問錯誤 一、HWI介紹 HWI&#xff08;Hive Web Int…

【前端】CSS基礎(學習筆記)

一、簡介 1、HTML局限性 HTML只關注內容的語義&#xff0c;但是丑&#xff01; 2、CSS概要 CSS 是層疊樣式表 ( Cascading Style Sheets ) 的簡稱&#xff0c;有時我們也會稱之為 CSS 樣式表或級聯樣式表。 CSS 是也是一種標記語言 CSS 主要用于設置 HTML 頁面中的文本內…

blender 粒子系統 roughness 屬性

粒子系統中的Roughness是一種用來控制粒子的隨機性和不規則性的屬性&#xff0c;它可以影響粒子的發射方向、速度、大小、旋轉等。Roughness有以下幾個子屬性&#xff1a; - **Uniform**&#xff1a;這個屬性用來控制粒子的發射方向的隨機性&#xff0c;即粒子在法線方向上的偏…

托盤四向穿梭車自動化密集庫供應|單機智能向系統智能跨越的HEGERLS托盤四向車系統

隨著物流產業的迅猛發展&#xff0c;托盤四向穿梭式自動化密集倉儲系統可認為是在穿梭車貨架系統基礎上提出的一種新倉儲概念。托盤四向穿梭式立體庫因其在流通倉儲體系中所具有的高效密集存儲功能優勢、運作成本優勢與系統化智能化管理優勢&#xff0c;已發展為倉儲物流的主流…

喜訊:加速度商城系統全系列產品品牌全新升級為Shopfa

2月1日訊&#xff1a;經過1年多的品牌文化塑造&#xff0c;深圳市加速度軟件開發有限公司經過研究決定&#xff0c;將旗下的多商戶商城系列、小程序商城系列、B2B商城系列、供應商集采系列、電子元器件商城系列、跨境獨立站商城系列、MRO工業品商城系列、外賣商城系列、智慧零售…

重寫 AppiumService 類,添加默認啟動參數,并實時顯示啟動日志

一、前置說明 在Appium的1.6.0版本中引入了AppiumService類&#xff0c;可以很方便的通過該類來管理Appium服務器的啟動和停止。經過測試&#xff0c;使用該類的實例執行關閉server時&#xff0c;并沒有釋放端口號&#xff0c;會導致第二次啟動時失敗。另外&#xff0c;使用該…

6.2 U-boot 頂層 Makefile

一、U-boot工程目錄分析 如果要分析uboot源碼&#xff0c;首先要將uboot源碼進行編譯&#xff0c;編譯需要在Ubuntu進行&#xff0c;把uboot文件放在一個目錄下。 編譯完成后的文件是這樣&#xff1a; 我們需要看的文件夾如下。 1. arch 文件夾 從上圖可以看出有很多架構&…

geolife筆記:整理處理單條軌跡

以 數據集筆記 geolife &#xff08;操作篇&#xff09;_geolife數據集-CSDN博客 軌跡為例 1 讀取數據 import pandas as pd data pd.read_csv(Geolife Trajectories 1.3/Data//000/Trajectory/20081023025304.plt,headerNone, skiprows6,names[Latitude, Longitude, Not_Im…

【GEE筆記】在線分類流程,標注樣本點、分類和精度評價

GEE在線分類流程 介紹 GEE&#xff08;Google Earth Engine&#xff09;是一個強大的地理信息處理平臺&#xff0c;可以實現在線的遙感影像分析和處理。本文將介紹如何使用GEE進行在線的分類流程&#xff0c;包括標注樣本點、分類和精度評價。本文以2020年5月至8月的哨兵2影像…

什么是散列函數

散列函數是一種公開的數學函數。散列函數運算的輸入信息也可叫作報文。散列函數運算后所得到的結果叫作散列碼或者叫作消息摘要。散列函數具有如下一些特點&#xff1a; &#xff08;1&#xff09;不同內容的報文具有不同的散列碼&#xff0c;而一旦原始報文有任何改變&#xf…

__attribute__ 詳解

GNU C的一大特色(卻不被初學者所知)就是__attribute__機制。__attribute__可以設置函數屬性(Function Attribute)、變量屬性(Variable Attribute)和類型屬性(Type Attribute)。 特征: __attribute__書寫特征是: __attribute__前后都有兩個下劃線,并切后面會緊…

文件管理和操作工具Path Finder mac功能介紹

Path Finder mac是一款Mac平臺上的文件管理和操作工具&#xff0c;提供了比Finder更豐富的功能和更直觀的用戶界面。它可以幫助用戶更高效地瀏覽、復制、移動、刪除和管理文件&#xff0c;以及進行各種高級操作。 Path Finder mac軟件功能 - 文件瀏覽&#xff1a;可以快速瀏覽文…

【數據結構 — 排序 — 插入排序】

數據結構 — 排序 — 插入排序 一.排序1.1.排序的概念及其運用1.1.1排序的概念1.1.2排序運用1.1.3 常見的排序算法 二.插入排序2.1.直接插入排序2.1.1.算法講解2.1.2.代碼實現2.1.2.1.函數定義2.1.2.2.算法接口實現2.1.2.3.測試代碼實現2.1.2.4.測試展示 2.2.希爾排序2.2.1.算法…