repo總結

1、 repo start  ##創建並切換分支
repo start  newbranchname [--all | projectName]
剛克隆下來的代碼是沒有分支的,repo start是對git checkout –b 命令的封裝。爲指定的項目或所有項目(若使用—all參數),以清單文件中爲設定的分支,創建特性分支。這條指令與git checkout –b 還是有很大的區別的,git checkout –b 是在當前所在的分支的基礎上創建特性分支,而repo start是在清單文件設定分支的基礎上創建特性分支。例如:
repo start  stable  --all
假設清單文件中設定的分支是gingerbread-exdroid-stable,那麼執行以上指令就是對所有項目,在gingerbread-exdroid-stable的基礎上創建特性分支stable。
repo start  stable  platform/build platform/bionic
假設清單文件中設定的分支是gingerbread-exdroid-stable,那麼執行以上指令就是隻對platform/build、platform/bionic兩個項目,在gingerbread-exdroid-stable的基礎上創建特性分支stable
2、repo branch  ##查看分支
3、repo manifest  ##查看清單文件
repo manifest -ro aaaaa.xml  ##生成tag文件
4、repo status(查看文件狀態)
是對git diff-index、git diff-filse命令的封裝,同時顯示暫存區的狀態和本地文件修改的狀態
5、repo abandon branchName ##刪除分支
6、repo version  ##查看repo版本號
7、repo grep  ##在項目中進行內容查找

8、repo sync
默認同步所有倉,可以指定project 。
如果是第一次運行 repo sync ,則相當於 git clone,會把server所有內容都拷貝到本地。根據manifests中的xml文件中git的commit進行同步,這個xml文件在repo init的時候指定;
如果不是第一次運行 repo sync ,則相當於 git remote update ;  git rebase origin/branch .將server上的code與本地合併;repo sync 會更新 .repo 下面的文件。如果在merge 的過程中出現衝突,這需要手動運行:git  rebase --continue
注意:repo sync 是不會更新 .repo/repo這個倉的!
repo sync 的參數:
-j:開啓多線程同步操作,會加快sync命令的執行速度。默認情況下,使用4個線程併發進行sync。 
-c, –current-branch:只同步指定的遠程分支。默認情況下,sync會同步所有的遠程分支,當遠程分支比較多的時候,下載的代碼量就大。使用該參數,可以縮減下載時間,節省本地磁盤空間。 
-d, –detach:脫離當前的本地分支,切換到manifest.xml中設定的分支。在實際操作中這個參數很有用,當我們第一次sync完代碼後,往往會切換到dev分支進行開發。如果不帶該參數使用sync, 則會觸發本地的dev分支與manifest設定的遠程分支進行合併,這會很可能會導致sync失敗。 
-f, –force-broken:當有git庫sync失敗了,不中斷整個同步操作,繼續同步其他的git庫。 
–no-clone-bundle:在向服務器發起請求時,爲了做到儘快的響應速度,會用到內容分發網絡(CDN, Content Delivery Network)。同步操作也會通過CDN與就近的服務器建立連接, 使用HTTP/HTTPS的$URL/clone.bundle來初始化本地的git庫,clone.bundle實際上是遠程git庫的鏡像,通過HTTP直接下載,這會更好的利用網絡帶寬,加快下載速度。

9、repo init
repo init -u xxx/manifest.git -b xxx -m xxx --repo-url=git://codeaurora.org/tools/repo.git --repo-branch=caf-stable
repo相當於一個批處理文件,使用repo腳本可以一次下載多個Git 倉庫的內容,避免多次git clone,並能進行更好的管理和使用。
用 repo 拿的時候其實 .git 統統會放在 .repo 裏,然後外面的.git都只是link。

repo腳本有如下可用參數:
--repo-url=URL
repo 工具本身的 git 庫地址。缺省爲:git://android.git.kernel.org/tools/repo.git
--repo-branch=REVISION
使用repo的版本庫,即repo git庫的分支或者里程碑名稱。缺省爲caf-stable
--no-repo-verify                 設定不要對repo的里程碑簽名進行嚴格的驗證。
-u(--manifest-url)               設定清單庫的Git服務器地址。
-b(--manifest-branch)        檢出清單庫的特定分支。
--mirror                              只在repo第一次初始化的時候使用,建立本地鏡像
-m(--manifest-name)         指定清單庫中的某個清單爲有效的清單文件。默認爲default.xml。
--no-tags                                 don't fetch tags                                      
repo 命令參數的含義,可以執行repo help command(sync)來看。

命令rep init完成如下操作:
1.完成repo工具的完整下載,執行的repo腳本只是一個引導工具,並不是下載代碼的腳本。
2.克隆清單庫manifest.git到目錄.repo/manifests/下。(地址來自於-u參數)
3.清單文件.repo/manifest.xml只是符號鏈接,它指向.repo/manifests/default.xml。
4.如果.repo/manifests/目錄中有多個xml文件,repo init -m 參數可以任意選擇其中一個,默認是default.xml。

清單文件解析:
一個清單庫文件可以包含多個清單文件(標籤include)和多個分支(標籤revision)。
remote元素:<remote  fetch="../"  name="origin"  review="http://IP:8080"/>
屬性fetch:下載的相對路徑
屬性name:遠程版本庫命
屬性review:基址
default元素:<default remote="origin" revision="branch-name" sync-j="4"/>
設置默認版本庫和分支。各個項目(project元素)可以定義自己的remote和revision覆蓋默認的配置。
project元素:
<project name="device/mediatek/common" path="device/mediatek/common">
        <copyfile dest="mk" src="mk"/>
</project>
屬性path:工作區克隆的位置
屬性name:遠程版本庫的相對路徑

子元素copyfile:定義了克隆後的一個附加動作,從src拷貝到dest

以下命令非常有用!
repo forall -p -c "git push origin HEAD:refs/heads/mtk_8.1_6763 2>&1 | tee push.log"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章