git-repo相关

只用git命令也能正常拉仓库,上传代码,repo集成了一些功能?

小型项目(例如3个算法(dsp+FPGA),3个bsp,2个上层)需要用git管理代码吗,或者有其他合适的工具吗

kernel级项目属于大型项目

repo是Google开发的用于管理Android版本库的一个工具,repo是使用Python对git进行了一定的封装,并不是用于取代git,它简化了对多个Git版本库的管理。用repo管理的版本库都需要使用git命令来进行操作。

repo下载安装
下载地址:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo ,将下载下来的文件命名为repo,放在PATH环境变量所包含的目录下面,例如可以放在/usr/local/bin目录下(后面介绍均以放在/usr/local/bin目录下为例)。
其实下载下来的repo文件只是一个使用Python编写的引导脚本(Google 称之为 Repo launcher,本质上是一个python脚本,可以使用vim打开的),完整的repo(即,repo的主体部分)还没有下载。repo还未安装,需要执行repo init安装。(需要注意repo init需要跟参数的,后面会单独介绍repo init的使用)这里就会涉及到一个问题,repo的主体部分是从哪里下载的?其实查看repo的引导脚本(/usr/local/bin/repo)可以发现,repo主体部分默认从https://gerrit.googlesource.com/git-repo获取(即,执行repo init命令时,不设置--repo-url选项),这个网站需要科学上网才可以访问。
 

1,实际使用中我们会遇到一些具体repo指令不能用

导致你提交不了代码,合并不了分支啥的

1.1repo init

repo init [options] [manifest url]
 

repo init -u manifest_git_path -m manifest_file_name -b branch_name --repo-url=repo_url --no-repo-verify
 

repo init -u ssh://xxx@git.mioffice.cn:29418/platform/manifest.git -b master-u -m default.xml --repo-url=ssh://xxx@git.mioffice.cn:29418/tools/repo.git --depth=1 --no-repo-verify

命令效果:
首先当前目录产生一个.repo目录
然后克隆一份repo的源代码到.repo/repo下,里面存放了其他repo子命令,即repo的主体部分。
接着从manifest_git_path仓库地址clone清单库到.repo/manifests和.repo/manifests.git目录。
同时.repo目录下还包括manifest仓库(清单库)内容

常用选项:

-u:指定Manifest库的Git访问路径。唯一必不可少的选项
-m:指定要使用的Manifest文件。不指定的话,默认为default.xml文件
-b:指定要使用Manifest仓库中的某个特定分支(例如手机仓库很大,你可以单独拉kernel下某个文件夹的代码)
--repo-url:指定repo的远端repoGit库的访问路径。
--no-repo-verify:指定不要验证repo源码。
--mirror:创建远程存储库的副本,而不是客户端工作目录。该选项用于创建版本库镜像。使用该选项则在下一步repo sync同步时,本地按照源的版本库组织方式进行组织,否则会按照 manifest.xml 指定的方式重新组织并检出到本地

执行repo init命令之后,会在当前目录创建一个.repo文件夹。manifests      manifest仓库(清单库)内容,即repo init-u选项对应的仓库。manifest文件是用XML文件的格式记录了本项目依赖的各个Git仓库的名称、地址,以及分支等信息。

1.2repo sync

repo init后就可以拉代码了,repo sync -j6 -d -c --no-tag会将整个项目下载下来,也可以单独下载某个文件夹的

命令为下载的整个manifest的所有仓库都创建分支,例如 ”repo start k8 --all“,会每一个仓库都会创建k8这个分支

1.3 添加本地分支

repo start k8 --all      k8就是自己的本地仓库名字  可以自己起名字

1.3 git 如何只下载一个仓库并且提交修改

在这里记录两个单独下载一个仓库的办法

1.3.1、直接去Gerrit里下载一个

这里使用charge_logger_new 举例,如果要修改这个仓库东西而且不需要修改其他文件的话,就可以先去Gerrit搜索一下相关提交

点击这里查看仓库信息,还可以顺便看看这里其他人的提交。确定一下是不是自己需要的仓库

然后再点击这个,我们马上就可以下载这个仓库了

选择第一个复制粘贴去终端,按下Enter,就可以下载这个仓库了

这里会发现clone下来没有文件,是因为我们没有checkout,没有追踪需要的远端分支

确认一下确实是主分支,然后我们就可以追踪一下想要的远端

我们追踪了远端之后就有了所需的代码,如果要是不放心我们可以再pull一下看看有没有未更新的

1.3.2 使用 repo sync 仓库路径 拉取仓库

有些时候不是很确定要怎么在Gerrit里搜索,但是我们知道路径而且repo init了。那其实也是可以只下载一个仓库的

还是以charge_logger_new举例

这样我们就有了下载单个仓库的办法,之后使用git push就可以提交了。

做完修改之后准备使用git push之后发现少写了后面的分支信息,于是补全一下

记得要加refs/for/提交的分支名,不加refs/for会失败,之后我们就可以去Gerrit查看我们的提交了

以上就是下载一个仓库并提交的方法了

ps:不用repo upload 主要是还没学会怎么样在只下载一个仓库的前提下用repo upload提交代码

例子:

1.4 repo upload .失败怎么办

出问题先用git push救急

执行命令: git remote -v,查看这个patch对应的仓名:

使用git push提交到gerrit,将patch对应的仓名中的git改成gerrit.pt

而"HEAD:refs/for/"后面对应的"bsp-qcom-s"是分支名,需要根据具体的项目来定

例子:git push ssh://cuibinbin@gerrit.pt.mioffice.cn:29418/platform/vendor/qcom-proprietary/mm-camerasdk HEAD:refs/for/bsp-qcom-s

repo init出问题   可以添加 --no-repo-verify

使用repo upload需要搭建gerrit环境,并且在manifest文件remote元素中添加review属性,使用 git rebase -i,然后再运行 repo upload

一般就是这些指令来回整

  138  git status
  139  git add -A .
  140  git status
  141  git commit --amend

  144  git pull
  149  git rebase

下面这俩  不是这个行就是那个行

rm -fr ".git/rebase-merge"  有时候需要

git pull
  git push ssh://tianxiang1@gerrit.pt.mioffice.cn:29418//device/xiaomi/dada HEAD:refs/for/master-v-qcom

git pull miui HEAD:refs/for/master-v-qcom

repo就这几个命令常用

2,git

git常用命令    等再搜索几篇文章的

2.1 git  pull出错

如果你本地分支有修改,git pull会报错,提示你有未提交的修改

git branch -a   或者  git branch -a  找到  远程主分支

git reset --hard miui/master-u-qcom     和远程主分支同步    

git pull

3,查找代码提交信息

git blame <filename> -L n,m

查看filename文件从n到m行的提交信息

例如

/drivers/power/supply$ git blame ti_battery_charger.c -L 3661,3663

回复

Blaming lines: 100% (3/3), done.
dd2116df9a93d (Subbaraman Narayanamurthy 2019-12-19 17:11:49 -0800 3661) 
ee4ed6549350f (lsy1                   2024-04-01 19:39:51 +0800 3662) QTI_CHARGER_RO_SHOW(moisture_detection_status, PSY_TYPE_USB, USB_MOISTURE_DET_STS);
dd2116df9a93d (Subbaraman Narayanamurthy 2019-12-19 17:11:49 -0800 3663) 

3,git fetch 切换分支

git fetch miui research-u-qcom-bp-sm8650-HW34023  (目标分支)

git branch -a

git branch -a |grep 34023    在所有列出的分支里找34032

git branch -vv

git checkout  -b  分支名

  表示以当前分支的当前状态创建新分支并切换到新分支    -b 表示创建新分支

git checkout -b 34033 remotes/miui/research-u-qcom-bp-sm8650-HW34023

git switch -c  remotes/miui/research-u-qcom-bp-sm8650-HW34023   切过去

4,本地分支进行了修改无法git pull

基于本地分支修改了文件,无法git pull   也无法git rebase(rebase到远程分支)

必须的解冲突    会提示哪个文件冲突了   该文件冲突处会标深   能看到冲突位置

解完冲突后   需要先git add .    repo upload .   然后再git rebase --continue

可以git log看一下  

git branch -D k88   散出本地k88分支

git reset --hard HEAD^    本地分支追踪到git log里前一个提交位置    上面图片正好是远程分支位置
git reset --hard HEAD  017333.....(上面图片黄色远程分支位置)   本地分支追踪到git log里特定提交位置

repo upload . 出错了   这么解决

k8  本地分支名字  我的提交就在这个分支上   把前面的#去掉

参考链接:

1,【精选】git repo工具详细使用教程——彻底学会Android repo的使用_repo教程-优快云博客

(很详细)

2,【精选】repo入门和基本用法_repo start_Jason_Lee155的博客-优快云博客

3,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值