http://www.linecg.com/video/play29775.html
http://herry2013git.blog.163.com/blog/static/21956801120144810133569
如下从XX文档总结出来:
一、 创建客案分支SDK 下载后,进入到 SDK 目录,
$cd AD900B_CS
$ls -a //查看内容
二、命令介绍:
刚克隆下来的代码是没有分支的,可采用 repo branch 查看分支名。采用 repo start 命
令新建分支。repo start 命令实际是对 git checkout –b 命令的封装。为指定的项目或
所有项目(若使用—all 参数),以清单文件中为设定的分支,创建个性分支。
需要注意,
这条指令与 git checkout –b 还是有很大的区别的, checkout –b 是在
git
当前所在的分支的基础上创建个性分支,而 repo start 是在清单文件设定分支的基础上
创建个性分支。
(1)创建 master 分支
通过 repo start master --all 命令创建 master 分支
切换到 master 分支
通过 repo checkout master 命令切换到 master 分支
(2)创建客户分支
如创建名为 work_1、work_2 的分支
repo start work_1 --all
repo start work_2 --all
分支切换
repo checkout 分支名
现在我们已经建立了项目主分支 master,和客户分支(work_1、work_2),后续该方案
的所有需求都在客户分支上修改实现。
(3)删除客户分支
切换到 master 分支
通过 repo checkout master 命令切换到 master 分支
再删除
repo abandon work_XXX
三、git 仓库修改提交
在开发客案分支过程中,
会修改到某些 git 仓库的代码或资源文件,
修改并确认完后需要提
交到 git 仓库中保存。
比如修改了 owl/s900 目录下的配置信息,修改验证 OK 后需提交到 git 仓库中,提交方案可
按照下面的方法:
$git add .
$git commit -m “update boards info”
如果需要修改的仓库较多,可以使用 repo forall 命令,该命令可以在所有指定的项目中执行
同一个 shell 指令。也就是说 repo forall -c git commit -m “update boards info”命令可以在所
有仓库中提交当前的更改。
四、 项目分支切换
比如当前 SDK 创建了两个客案分支,分别为 work_1 和 work_2。
查看当前 SDK 所有本地分支
$ repo branch //结果中带 * 标记的即为当前所在分支。
如上图所示当前 SDK 在 work_2 的分支上
从 work_2 切换到 work_1 分支
首先,检查 work_2 分支是否有未提交的修改,如果有的话需要先提交后再操作
$git status
切换分支
$repo checkout work_1
确认结果
$rope branch
如下结果,*指向了 work_1。
五、 集成打 TAG
在代码更改并提交之后可以使用 repo manifest 命令打 TAG,即根据当前的 commit 号,生成
一个 xml 文件,命令如下:
repo manifest -r -o xxx.xml
六、SDK更新
repo status //查看是否有修改没有提交,若有,则先提交。
先切换到 master 分支
$repo checkout master
更新代码,按照提供的下载代码的方式进行。
$repo init ........
$repo sync
这样,将在 master 分支,将代码更新到新的版本。
切换到客案分支上
$repo checkout work_2
将新版本的代码 merge 到客案分支上
$ repo forall -c git merge master
$ repo forall -c git rebase master (最好用这个命令)
进入各个仓库,检查同步是否成功(一定要仔细)
$git status
Merge 后如提示类似语句提示有 Unmerged paths 的表示有文件没有完成同步操作。这
主要是 master 和客案分支都修改了同一个地方 造成冲突引起,
这时,
需手动修改这个地方
再提交。
eg:
repo init -u ssh://git@git.actions-semi.com:2412/publish/manifest.git -b br_owl_v700 -m TAG_xxxxx_owl_v700_android_5110.xml
七、merge操作
git merge origin master 和 git merge origin/master的区别在哪里?
(1)git merge origin master //将origin merge 到 master 上
(2)git merge origin/master //将origin上的master分支 merge 到当前 branch 上
git merge branchA branchB, branchB 一般默认为当前branch,所以
一般进行merge操作时,最好先checkout到你希望进行merge操作的分支,也就是branchB上,然后再进行
git merge branchA //默认为当前branch,即branchB
因为你不能确保是否产生confict,所以先checkout到branchB上。
此外,为了保险起见,你可以在merge前先建一个备份分支
git checkout -b branchB_backup
这样即使你merge后出现不可控的情况,还可以check回来。
八、常用命令
gitk //查看提交记录,图形界面显示。
git log //查看提交历史记录,按字母“q”,退出Log记录显示。
commit操作:
第一步:git add .
第二步:git commit -m “update boards info”
如果需要修改的仓库较多,可以使用 repo forall 命令,该命令可以在所有指定的项目中执行同一个 shell 指令。
也就是说 repo forall -c git commit -m “update boards info”命令可以在所
merge操作:
第一步:git checkout master //切回到master主分支。
第二步:git merge --no-ff work_2 //先切回到master分支,再执行Merge合并子分支操作。合并时 --no-ff选项避免fast forward。
rebase操作:
第一步:git checkout work_2
第二步:git rebase master
git branch -d work_2 //删除work_2分支,如果有修改但又未合并,是删不掉的。
git branch -D work_2 //强行删除work_2分支。
git push orign work_2
git tag -a v1.0 -m "version 1.0" //带注释的标签,在运行tag命令时加上-a就可以了。
git show //显示提交记录的具体修改
############### 重要://更新代码 start ###############
从master更新到work_2操作步骤:
根目录:repo checkout work_2
cd kernel
git checkout work_2
git rebase master
若有冲突,如s900vr_v3s_cp.dts文件,则手动解决冲突,
再git add . 然后git commit -am "fix conflict"即可。冲突解决完成,代码也更新下来了。
cd u-boot (如上原理,其他目录亦如此)
git rebase master
############### 重要://更新代码 end ###############
九、冲突处理
当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(conflict)。解决冲突需要人工处理。
比如当前在master分支,想把work分支merge过来,结果产生了一个冲突,打开文件内容可以看到这么一个冲突:
<<<<<<< HEAD
test in master
=======
test in work
>>>>>>> work
<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
HEAD指向当前分支末梢的提交。
=======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。
>>>>>>>之后的dev是该分支的名字。
对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。
注意:
(1)冲突手动解决后,git status报错:prior sync failed; rebase still in progress
project u-boot/ <* NO BRANCH *>
在u-boot目录下执行: git rebase --abort
(2) 解决(1)冲突后,有如下分岐:
afull@AFULL:~/software/Actions/Debug_actTag0820/u-boot$ git status
# On branch work_2
# Your branch and 'owl_v700/master' have diverged,
# and have 1 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)
解决方法:
如果不需要保留本地的修改,只要执行下面两步:
git fetch origin (此处的origin == owl_v700.)
git reset --hard origin/master
十、分支重命名
重命名分支:
git branch –m oldname newname
-m不会覆盖已有分支名称,即如果名为newname的分支已经存在,则会提示已经存在了。
如果改成-M就可以覆盖已有分支名称了,即会强制覆盖名为newname的分支,这种操作要谨慎。
十一、打Patch
在Kernel目录下打Patch,如0001-kernel-support-AUO-2k.patch。
查看这个.patch可知Patch目录:diff --git a/drivers/video/owl/dss/panel/panel-tc358860.c b/drivers/video/owl/dss/panel/panel-tc358860.c
$cd kernel
$patch -p1 < 0001-kernel-support-AUO-2k.patch
会提示Success。
-------------------------------------------
取消打Patch
$ patch -RE -p0 < 0001-kernel-support-AUO-2k.patch
十二、
(1)查找文件
find .|grep bootloader.ini
./boards/android/s900vr_v3s_cp/bootloader.ini
./boards/android/s900vr_V902/bootloader.ini
(2)git log master
LPDDR3新仓库
repo init -u ssh://git@git.actions-semi.com:2412/publish/manifest.git -b br_owl_vr -m TAG_xxxxxx_owl_vr_android_5110.xml
看下git log -p 文件名的修改历史
1. repo init -u ssh://git@git.actions-semi.com:2412/publish/manifest.git -b br_owl_vr -m TAG_xxxxxx_owl_vr_android_5110.xml
2. repo sync
V500仓库
1. repo init -u ssh://git@git.actions-semi.com:2412/publish/manifest.git -b br_owl_gs500b -m TAG_xxxxxx_owl_gs500b_android_5110.xml
2. repo sync
cd android/u-boot/
git checkout -b temp1
git checkout -b temp2
git apply ~/temp/0001-uboot-support-AUO-2k.patch --check
git apply ~/temp/0001-uboot-support-AUO-2k.patch
git st
git diff --check
cd ../kernel/
git checkout -b temp1
git checkout -b temp2
git apply ~/temp/0001-kernel-support-AUO-2k.patch --check
git apply ~/temp/0001-kernel-support-AUO-2k.patch
git st
git diff --check
在Work_2分支下:
cd kernel
git fetch owl_vr
git branch -a
git rebase remotes/owl_vr/master
###################################################################
Rebase Log:
afull@AFULL:~/software/Actions/Lpddr3_sdk_Tag/owl$ repo forall -c git rebase master
... A new repo command ( 1.18) is available.
... You should upgrade soon:
cp /home/afull/software/Actions/Lpddr3_sdk_Tag/.repo/repo/repo /usr/bin/repo
First, rewinding head to replay your work on top of it...
Applying: s900vr_V902 project
First, rewinding head to replay your work on top of it...
Applying: 1.Add V902 OuZhiTong adckeypad. 2.Mod Sharp Lcd init VPN_SW. 3.Use Lpddr3-3GB size.
Applying: 1.s900vr_V902 project 2.Diff Sharp and Auo Lcd drivers 3.Add V902 charge led's driver
Using index info to reconstruct a base tree...
<stdin>:250: trailing whitespace.
<stdin>:265: trailing whitespace.
//Mould-1: OuZhiTong
<stdin>:383: space before tab in indent.
/* LDO0 SD_VCC
<stdin>:772: space before tab in indent.
usb2h0: usb@e02b0000 {
<stdin>:844: trailing whitespace.
warning: squelched 268 whitespace errors
warning: 273 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging drivers/power/atc260x_charger.c
Auto-merging arch/arm64/configs/v700_gb7_defconfig
Auto-merging arch/arm64/boot/dts/s900vr_v3s_cp.dts
CONFLICT (content): Merge conflict in arch/arm64/boot/dts/s900vr_v3s_cp.dts
Recorded preimage for 'arch/arm64/boot/dts/s900vr_v3s_cp.dts'
Failed to merge in the changes.
Patch failed at 0002 1.s900vr_V902 project 2.Diff Sharp and Auo Lcd drivers 3.Add V902 charge led's driver
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
First, rewinding head to replay your work on top of it...
Applying: Use Lpddr3-3GB size.
Applying: 1.s900vr_V902 project 2.V902 use Lp-ddr3-3G patch
Using index info to reconstruct a base tree...
<stdin>:45: trailing whitespace.
[serial]
<stdin>:46: trailing whitespace.
;uart_id:uart index
<stdin>:47: trailing whitespace.
;uart_pad:which pin the uart_id used
<stdin>:48: trailing whitespace.
;uart_baudrate:the serial's baudrate
<stdin>:49: trailing whitespace.
uart_id=5
warning: squelched 229 whitespace errors
warning: 234 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Current branch work_2 is up to date.
Current branch work_2 is up to date.
Current branch work_2 is up to date.
Current branch work_2 is up to date.
Current branch work_2 is up to date.
First, rewinding head to replay your work on top of it...
Fast-forwarded work_2 to master.
Current branch work_2 is up to date.
Current branch work_2 is up to date.
First, rewinding head to replay your work on top of it...
Applying: Mod Sharp Lcd init VPN_SW.
Applying: 1.s900vr_V902 project 2.Diff Sharp and Auo Lcd drivers 3.Add V902 charge led's driver
Applying: Distinguish Sharp&Auo,and V901&V902 lcd drivers.
afull@AFULL:~/software/Actions/Lpddr3_sdk_Tag/owl$