自己要做 repo mirror.
用repo forall 來run 這個:
$ cat pp.py #!/usr/bin/python import os import subprocess rfolder ='/home/charles-chang/rr3/' lfolder ='/home/charles-chang/MY_Android14/' repo_project = os.getenv('REPO_PROJECT','test/demo') repo_path = os.getenv('REPO_PATH','repomirror') pname = rfolder + os.path.dirname(repo_project) print(f"REPO_PROJECT: {repo_project} {pname}") print(f"REPO_PATH: {repo_path}") os.makedirs(pname,exist_ok=True) tname = rfolder + repo_project +'.git' print(f"{tname}") result = subprocess.run(["git","clone","--no-local","--mirror",lfolder+repo_path,tname])就是:
repo forall -c /home/charles-chang/pp.py就會create一個 repo server folder: rr3
第一步,repo sync -l 後,要做 git clone 其中的 project,會出現 Error:
結果是因為 symbolic link 的關係:
- Bitbake do_fetch error /.git/objects: not a directory
- builtin/clone.c: disallow --local clones with symlinks
- clone: error specifically with --local and symlinked objects
結果 .repo/project-object 裡面的 folder 安排方式就是 mirror 的方式,可惜 git 內容不是 mirror 的...
一些問題:
repo init 指定 -m XXX時,不單純只是把 manifest.xml 內容寫成 include XXX,同時會讀取 XXX 的內容,如果有問題,就會出現 Error,
然後這個 repo init 命令就會 Fail
manifests.git 所在位置和 manifest.xml 中,remote tag 的 fetch 有關,fetch="..\.." 的話,manifests.git 就要在 跟目錄的下一層通常是 platform 下。
如果直接在 project root,就用 fetch=".." 就可以。
做 repo sync動作時,會把git commit 內容輸出到 .repo/TRACE_FILE。
或是(舊版?),宣告環境變數 REPO_TRACE=1,可以輸出 Trace( ) 到 stdout.
同樣的,git 也可以輸出trace 就是用
GIT_CURL_VERBOSE=1 GIT_TRACE=1