新员工代码提交流程--代码编译入门(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 分支名]

注意:git clone不太好,他表示把远程分支克隆一个下来,如果用这中方式拉取到本地的代码,在提交代码的时候,会被有commit id号,导致无法上库

正常同步一个git库下来,可以用一下方式:

1、依然是repo init

repo init -u ssh://192.168.10.18:29400/MTK6750/manifest -b master -m N8_L1_IOS.xml
2、在 ls .repo/manifests中查看分支/仓、一个git库名称

3.直接使用repo sync  -j16   库路径:比如kernel/msm5.10

②、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替换成对应的分支名

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值