只要 create 一個 git project,裡面就是 manifest 的 xml 檔。
其中要有一個 default.xml, repo 會用這個做 主要的 manifest.xml
repo init -u mymanifestmymanifest 就是放 default.xml 的 project folder
舉例來說:
假設myrepo 專案有 proj1, proj2 兩個 git source
. ├── proj1 └── proj2想要用 repo/manifest 來管理。
就create 一個 manifests,裡面有 default.xml,也要用 git 管理:
<?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="origin" fetch="./" /> <default revision="master" remote="origin" /> <project path='proj1' name='proj1' /> <project path='prij2' name='proj2' /> </manifest>然後 myrepo 下有三個 git projects:
. ├── manifests │ └── default.xml ├── proj1 └── proj2這樣,在 local 端,就可以用 repo init 來 clone 整個 project
mkdir testrepo && cd testrepo repo init -u ~/myrepo/manifests downloading Repo source from https://gerrit.googlesource.com/git-repo remote: Counting objects: 2, done remote: Finding sources: 100% (12/12) remote: Total 12 (delta 0), reused 12 (delta 0) Unpacking objects: 100% (12/12), done. Downloading manifest from /home/charles-chang/myrepo/manifests/ remote: Counting objects: 15, done. remote: Compressing objects: 100% (10/10), done. remote: Total 15 (delta 4), reused 0 (delta 0) Your identity is: charles.chang <charles.chang@loyaltech.com> If you want to change this, please re-run 'repo init' with --config-name repo has been initialized in /home/charles-chang/testrepo之後 repo sync 就會拉下所有的 project (不包含 manifest,manifest 會在 .repo/manifests)
然後一樣在 repo init 時加上 --mirror 就可以產生 git server 端的目錄結構 (方便放在 git server)
現在看來,要先用 python script : follow repo/manifest.xml 做出 repo mirror 的結構.,重新安排一次 project 目錄結構。
之後才能讓人做 repo init, sync..
-- 新版的 repo 不從 manifest.xml parsing 了, manifest.xml 也不再是 link,而是一個 include name,include default.xml (或其他)。
repo 管理後,如果要create 一個版本, fix 住目前的 project revision,可以用 repo manifest, 如何導出並使用清單文件? 的方法。用 repo manifest,列出有家 option 和沒加 option 的結果:
一般:
charles-chang@rdsuper:~/testmirror$ repo manifest <?xml version="1.0" encoding="UTF-8"?> <manifest> <remote fetch="./" name="origin"/> <default remote="origin" revision="master"/> <project name="pp/project1" path="project1"/> <project name="project2" path="priject2"/> </manifest>加上 supress-upstream-revision
charles-chang@rdsuper:~/testmirror$ repo manifest -r --suppress-upstream-revision <?xml version="1.0" encoding="UTF-8"?> <manifest> <remote fetch="./" name="origin"/> <default remote="origin" revision="master"/> <project dest-branch="master" name="pp/project1" path="project1" revision="7c4bcfb45cd9aa2266c0acf3f850a9ea50ae5ef9"/> <project dest-branch="master" name="project2" path="priject2" revision="907de68553f9b6d638aceb967c7a9f55bc8fcb03"/> </manifest>舊可可以把這個列出的結果存成新的 myversion.xml,加到 manifests.git 中。
如果 project 在另一個 project 中...可以用 .gitignore..
例如:
. ├── priject2 │ └── pp2 └── project1 ├── p3 │ └── myfile └── pp1p3 在 project1 裡。
manifest 是這樣:
<manifest> <remote name="origin" fetch="./" /> <default revision="master" remote="origin" /> <project path='project1' name='pp/project1' /> <project path='priject2' name='project2' /> <project path='project1/p3' name='p3' /> </manifest>可以看到 project path='project1/p3' 這樣。
但是這樣在 repo sync 後,project1 下 git status 就會看到 p3 new.
所以要加 .gitignore
p3
manifest 中,project 有些會有:
revision="36fb2aa4f7f25946e0ce3d4223095ce9601dd17f" upstream="cafe/QCLA.2.0-r00015.3"這樣的話,project 要有 rev="36fb2aa4f7f25946e0ce3d4223095ce9601dd17f" 的 commit 存在,同時,還要有個branch nane叫 ""cafe/QCLA.2.0-r00015.3".
用 git ls-remote 可以列出 remote ref head. 可以檢查
沒有留言:
張貼留言