Git和Repo管理使用簡要介紹

在Linux平臺下進行Android系統項目開發時,需要git或repo管理。

  一. Git和Repo的區別:

       1. Git:Git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。

       2. Repo: Repo是谷歌用Python腳本寫的調用git的一個腳本。主要是用來下載、管理Android項目的軟件倉庫(也就是說Repo是用來管理給Git管理的一個個倉庫的)

  二. Git庫管理項目:

      1. 一般在企業的Android開發中,公司會給程序員分配一個遠程服務器,企業本身也有一個代碼庫(該代碼庫集合了公司各種不同手機項目的Android系統代碼)。程序員可以在自己的遠程服務器上,從公司的代碼庫下拉相應的手機項目代碼,然後進行基於Android源碼的開發、維護、模塊單編譯(mm)、全編譯(make -j4)等各種企業需求的開發工作。

      2. 程序員開發完成需求時,需要將開發成果保存在公司的代碼庫,而這個保存的過程是需要一系列的安全性工作的。首先,程序員開發和維護的成果,需要經過項目負責人(主管、經理、總監之類)的評審、驗證才能最終提交到公司的代碼庫。

      3. 這個代碼評審、覈查的過程,由Gerrit(代碼評審工具)實現:

            Gerrit簡介:

            1). 基於 Web 的代碼評審和項目管理的工具,面向基於 Git 版本控制系統;

            2). 爲 Git 引入強制性的代碼審覈機制,非特別的授權設置,向 Git 版本庫的推送(Push)必須要經過 Gerrit服務器,經過審覈流程後,才能正式納入代碼庫;

            3). 每一次提交將對應一個評審任務;

            4). 通過特殊的分支提交評審任務(refs/for/….); 

            5). Gerrit 提供的 Git 服務的端口並非標準的 22 端口,缺省是 29418 端口;

            6). Gerrit缺省的Http端口是8080。

      4. Git常用指令操作:

           1). 查看當前代碼修改狀態:git status。如下圖: 注:MSM7x27A-ICS-AP爲整個Android系統源碼所在主目錄

     

     上圖輸入git status指令後,顯示的是你之前更改的代碼文件(包括文件所在路徑)

           2). 查看當前項目遠程代碼庫的提交記錄:gitk

                輸入gitk指令後,會跳出相應的記錄信息的窗口,通過該窗口可以查看其它程序員對本項目的遠程代碼提交記錄。

           3). 保存更改的代碼狀態:git stash (或者git stash save "命名");查看保存記錄:git stash list;還原保存的更改:git stash apply (或者git stash stash@{x});清除保存的更改記錄:git stash clear;

                 執行git stash 指令後,再執行git status查看代碼更改狀態,之前modified的代碼記錄將不會顯示,代碼回到更改之前的狀態。

                 執行git stash指令後,再執行git stash list,將看到如下的信息:

                  stash@{0}:..............

                  stash@{1}:...............

                        .

                        .

                        .

                 stash@{0}開頭爲最近的一次保存記錄。有時候爲了方便記憶和還原我們需要還原的修改記錄,這時候git stash save "xxx" (xxx由自己命名)就派上用場了,執行該指令後 ,我們再執行git stash list,將看到類似如下信息:            

                  stash@{0}:..............

                  stash@{1}:...............:xxx

                        .

                        .

                        .

                  這樣,我們就可以根據xxx的標記來執行git stash apply stash@{1} 還原我們之前保存的更改記錄了。

              4). 服務器本地代碼同步更新遠程庫的代碼:git pull --rebase ;

                   在執行git pull --rebase更新代碼之前,需執行git status查看當前本地代碼有沒有修改記錄,若有,則執行git stash 保存修改記錄,更新完後執行git stash apply恢復更改;如沒有,則直接執行git pull --rebase;(如果本地有修改記錄,則更新會出錯)。

               5). 一次性提交修改項(modified):git commit -a;接着執行"git push origin HEAD:refs/for/遠程分支名",把代碼提交到臨時代碼庫(爲通過評審),然後登錄Gerrit,添加評審人員(Add Reviewer),通過評審,提交到公司遠程代碼庫;

               6). 一次性提交修改項(modified)和添加項(add):git add .  (注意有小點); 單獨把修改項或添加項提交:"git add 文件(包括所在路徑)";

               7). 提交刪除文件:git rm ;

               8). 查看遠程代碼提交記錄節點信息:git log (按q字母退出);  執行git log後會得到提交記錄信息和相應的commit id值,如果需要回退到該程序員修改提交的記錄信息時的代碼,則執行"git reset --soft id值";

               9). 若代碼提交後(已經執行git push ... 操作),需要回退到提交之前的狀態:登錄Gerrit-->找到自己提交的Changes-->選擇Abandon Change-->回到遠程服務器代碼終端操作,執行git reset --soft HEAD^

               10). 把修改或刪除的文件回退到原狀態:"git checkout 文件名(包括路徑)";回退全部:git checkout . (注意有小點) 

               11). 查看當前代碼所在的本地分支(帶有*的爲當前本地代碼的分支):git branch ;

               12).將把地代碼切換到遠程對應的分支:"git checkout -b 本地分支名 遠程分支名";

                     如執行git branch後出現如下信息:

                      * name1

                         name2

                    name1爲當前代碼的本地分支,name2爲之前已經切換到自己對應的遠程代碼分支的本地分支。這時候,如果需要從name1切換到name2,那麼就不需要再執行git checkout -b name2 yyy(yyy爲遠程分支名)指令了,直接執行git checkout name2;就可以實現切換到name2分支;

               13). 查看所有分支(包括本地和遠程):git branch -a;

  三. Repo管理:

      Repo實現管理多個git庫,一般是多個項目共用一個主分支,而針對項目共用主分支的代碼都可以在overlay目錄裏開發、維護(overlay目錄所在遠程分支爲對應項目的分支,而不是當前共用的主分支);然後提交到對應的項目代碼分支;

       1.Repo 相關腳本下載操作,相關匹配完成後;下拉Repo管理的項目代碼:repo init -u gitserver:manifests.git -m xxx.xml (xxx.xml文件決定初始化的項目)-->repo sync--->創建xxx項目對應的分支:repo start xxx --all 

         (--all意爲將所有模塊都歸爲當前xxx分支下)

       2. 查看當前項目代碼所在的分支:repo branch;

       3.查看當前項目相應目錄代碼所在的分支情況(可能共用主分支或者在自己的分支),如查看framework/base下的代碼所在分支情況:執行 cd framework/base 進入base目錄-->執行git branch -a查看;如查看package/apps/Music系統應用模塊所在的分支情況: 執行cd package/apps/Music--->執行git branch -a;

       4.刪除不用的本地分支:“repo abandon 分支名” (同“git branch -d 分支名”)

       5.自動查找項目所在的分支(在沒執行repo start xxx --all的情況下),然後進行切換:repo forall -c git checkout -b xxx 項目對應的遠程分支名(最好是本地分支和遠程分支同名,除主分支外)

       6.Repo實現切換分支:執行cd .repo/manifests--->執行ls查看項目對應的xxx.xml文件--->執行cd -回到主目錄--->執行repo sync同步更新代碼--->執行”repo start xxx(本地分支名) --all“創建相應的本地分支(或者執行"repo -c -p git checkout 本地分支  遠程分支"指令);


ref: http://blog.csdn.net/stevenhu_223/article/details/8828130

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