新員工代碼提交流程--代碼編譯入門(repo && git)

常用指令:
        查看A文件是誰最近修改的:git log A (會打印出commit號)
        查看某條具體提交修改的內容:git show commit號
        查看當前文件某一行是誰修改的:git blame 文件名
        回退本地代碼到哪一筆提交之前:git reset --hard commit號

 

回退代碼的方法:

對於一個Git庫,回退到服務器,則使用:

  • Git log
  • Git checkout 6b78a8536fdcc25c20778b4fa8c4c301e096bc2f

或者

git reset --hard 6561422e8c406631230c1179a56454bc43c2c57b

表示該節點之後的都被回退掉了

 

 

一、初始化代碼庫

1、mkdir 文件目錄,例如:mkdir project_N8

2、cd 文件目錄,例如:cd project_N8

3、拉項目代碼

①、repo init初始化repo當前目錄

拉整個項目代碼

repo init -u URL –b 分支 –m xml文件,例如:repo init -u ssh://192.168.10.18:29400/MTK6750/manifest -b master -m N8_L1_IOS.xml。  (注此時的分支應該是遠程庫的分支,可以用git branch a查看當前所有分支)

          拉一個具體的git庫下來:比如拉一個vendor目錄:

git clone ssh://192.168.10.18:29400/MTK6750/vendor/mediatek/proprietary/custom

然後切換到對應分支:git checkout N8_L1_IOS.xml  (綠色的部分和repo init的一樣)

[如果只拉某一個文件,即git庫,則就下一步不需要repo sync了,直接進入對應生成的目錄------執行git branch –a------check到對應的分支:git  checkout 分支名]

②、repo sync,同步代碼到本地

【若是在主目錄裏新建文件,需要SCM的人提交,我們提交沒權限,等他們加好了,我們再更新本地庫就好了,只是repo sync不行,要麼重新拉代碼,要麼刪除build文件夾裏的makefile: rm -rf Makefile,可以直接刪除build文件夾,執行repo sync build -cj4命令即可】

  • repo sync cj16  “c表示更新當前分支即可”
  • make ptgen j16    “ptgen”表示讓當前修改也立即生效,否則當前修改無效

 

二、創建本地開發分支

查看當前分支:Git branch -a

//若自己就不在分支上,或者所在分支不對,則查看分支

      ls .repo/manifests

     repo init -m H970_native.xml    切換到這個分支

     repo sync      重新同步

  1. repo start 分支 --all       切分支命令
  2. 切完後查看一下是否ok:   git branch,查看當前分支情況  (branch 分支的意思)

三、修改代碼並提交

  1. cd 文件路徑,例如:cd packages/apps/Settings
  2. git status,查看有哪些修改文件.
  3. git add 文件路徑,例如:git add src/com/android/settings/Settings.java(注:這個路徑就是所修改文件的路徑,即由git status命令獲得的)

       快捷方式:git add . (點)可以一次性提交很多對應目錄下的修改文件。

      注意1:提交刪除的文件:git rm 文件路徑

       注意2:添加並不等於提交,提交是git commit –m “註釋”

    4. git status,查看文件是否添加正確   (修改文件路徑有紅色變成綠色)

    5. git commit –m “註釋”,例如:git commit –m “xxx xxx”

(commit向本地版本庫提交代碼的命令,-m選項是添加提交註釋,如果添加了,可以在版本歷史中看到。)

當自己寫的git commit報錯時,修改格式:

             1類問題:git config --global core.editor vim

二類問題:git commit --amend命令是當該文將剛剛提交到服務器而並沒有merged,此時再補充修改

把git commit -m "BUG ID:none DESCRIPTION:添加cxlite B_BOM 配置"

改成:

git commit --amend "BUG ID:none DESCRIPTION:添加cxlite B_BOM 配置"

 

  • 如果刪除的代碼很多,則先用命令git add --all (git add .)    然後用命令git commit -am "BUG ID:none DESCRIPTION:xxx"      -am表示add and move

如果用命令git rm 的話就要一句一句的提交,該命令不好。

git commit -am "BUG ID:none DESCRIPTION:過modem checklist"

6、git checkout 文件路徑,還原無需提交的修改文件,例如:git checkout src/com/android/settings/ActivityPicker.java   

若有很多,則用:git checkout -  即:回退所有

在沒有提交到本地庫之前執行此命令的話,即在git add和git commit –m執行之前,則自己修改的代碼就不會被保存<可以用git diff查看一下>;在提交到本地庫之後執行此命令的話,即把自己修改的代碼添加到文件中,讓自己目前的代碼和本地庫上的代碼一樣。相當於保存更新了一下。

 

[自己添加1:當修改代碼太多時要repo syncs 時會出現錯誤,這時可以用兩條代碼回退回來,git config --global alias.unstage 'reset HEAD --'

git config --global alias.restore 'checkout --' 

這兩條是宏定義,即把一個長的命令變短。執行它們之後我們纔可以執行後面的命令,執行完後就自動添加到了~目錄的.gitconfig文件裏。

具體執行命令:git unstage * 還原當前目錄已經commit後的代碼,  git restore * 還原當前目錄修改過的,用命令git status查看變爲紅色的代碼,都可以被還原,即在執行commit之前的代碼]

【自己添加2:git clean -fd;git reset --hard;git pull --rebase 一起執行,返回自己還沒有提交的修改代碼{ git clean -fd 刪除生成的多餘文件;git reset --hard 還原其它修改的內容;git pull --rebase 同步更新代碼,以防別人剛纔又合入新的patch}

如果commit之後的話,直接git reset hard不可以,要按以下命令。

Git log

git reset --hard 6561422e8c406631230c1179a56454bc43c2c57b

表示該節點之後的都被回退掉了。

【******提交報錯時:自己添加3:回退已經commit的代碼:git commit --amend  進去之後保存正確的格式,保存:ctrl+x 退出:enter.然後在git push

詳情請看郵件,轉發: 關於研發團隊git提交commit message規範格式正式上線使用的通

跟大家分享個今天碰到的git commit --amend修補提交用法,當有兩筆提交的時候,一般運行git commit --amend的時候修改的是最近一筆提交的信息;而你想修改第一筆提交的信息,這時候你需要運行指令:git reset --soft  commit_id; 其中commit_id爲你git log查看到的commit記錄,之後你再git commit --amend修改的就是你指定的第一筆提交的信息了。

7. git pull --rebase,更新本地當前節點至最新節點(拉直節點線),避免代碼merge時衝突,若rebase失敗,請參考第五步        (rebase重定基底的意思

【更新本地代碼:連同自己的修改也改變git reset --hard HEAD~~

同事給的:repo forall -c git reset –hard 可以在主目錄執行

回退已經提交到服務器上的代碼,而且本地修改還在:

git reset --mixed HEAD^

四、提交至遠程gerrit庫  

git push origin HEAD:refs/for/遠程分支名,或cd 至代碼庫根目錄(HIOS_C8)【可以不用到根目錄】,然後repo upload . ,例如:git push origin HEAD:refs/for/master     或     cd 到項目跟目錄repo upload .

五、解決rebase時文件衝突導致merge失敗問題

  1. git status,查看哪些文件有變動.
  2. git diff “變動文件”(這是可以查看到修改的具體代碼)

  3. vi “變動文件”,或者其他方式打開變動文件,手動修改衝突的地方,並保存

  4. git add “變動文件”
  5. git rebase –continue    更新本地當前節點至最新節點
  6. 完成後,參考第四步提交  繼續提交

六、如何查看分支信息:

(1)首先是明晰提交分支,有以下兩種方式獲悉:

1、查看.repo/manifest.xml文件中的revision字段

2、查看本地庫.git/config文件下的分支merge選項字段

(2)之後的操作和單git庫修改代碼、提交、push方法是一致的,只是要在單獨的git庫下使用git命令,可用repo list查看哪些目錄是git庫,也可查詢.repo/manifest.xml文件,path字段代表的目錄即爲git倉庫

      

git pull --rebase #代碼修改前獲取最新代碼(--rebase 避免服務器產生過多的合併分支)

git add changefile      #添加 修改過的文件,git status 可查看工作區代碼修改狀態

git commit #按照信息模板填寫提交信息。不能使用git commit -m 命令

git pull --rebase #如上

git push origin HEAD:refs/for/master #分支名根據實際情況,把master替換成對應的分支名

 

 

 

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