repo操作
Denzel张
已于 2024-01-08 11:19:53 修改
阅读量147
收藏
点赞数
文章标签: git github
版权
同步 操作
repo sync -c
删除所有的改动:
repo forall -c 'git reset --hard ; git clean -fdx'
分享一个一键导出patch和打patch的方法,可用于修改的保存与环境的快速对齐
1.生成patch
旧仓库执行如下指令
repo diff > xxx.diff
2.打patch
将xxx.diff拷贝到新仓库中,使用如下patch.sh脚本
patch.sh xxx.diff
patch.sh文件如下:
## Script to patch up diff reated by `repo diff`
if [ -z "$1" ] || [ ! -e "$1" ]; then
echo "Usages: $0 <repo_diff_file>";
exit 0;
fi
rm -fr _tmp_splits*
cat $1 | csplit -qf '' -b "_tmp_splits.%d.diff" - '/^project.*\/$/' '{*}'
working_dir=`pwd`
for proj_diff in `ls _tmp_splits.*.diff`
do
chg_dir=`cat $proj_diff | grep '^project.*\/$' | cut -d " " -f 2`
echo "FILE: $proj_diff $chg_dir"
if [ -e $chg_dir ]; then
( cd $chg_dir; \
cat $working_dir/$proj_diff | grep -v '^project.*\/$' | patch -Np1;);
else
echo "$0: Project directory $chg_dir don't exists.";
fi
done
效果如下:
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:repo操作_repo forall -c repo sync-CSDN博客
Repo切换分支与同步代码
1,repo forall -c git reset --hard 2,repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1 3,repo sync
repo使用
下载repo工具
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
or $ wget http://android.git.kernel.org/repo
or $ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
repo init -u gitserver:manifests.git -m xxx.xml repo项目初始化(xxx.xml文件决定初始化的项目)
repo sync 下载项目代码
repo start xxx --all 创建xxx项目对应的分支或者切换分支(--all意为将所有模块都归为当前xxx分支下)
repo branch 查看当前项目代码所在的分支
repo abandon 分支名 删除不用的本地分支(同git branch -d 分支名)
repo forall -c git checkout -b xxx 项目对应的远程分支名(最好是本地分支和远程分支同名,除主分支外)
repo -c -p git checkout 本地分支 远程分支
repo help command 显示command的详细的帮助信息内容
git使用
git status 显示之前更改的代码文件
git stash 保存更改的代码状态
git stash sava {name} 保存更改的代码状态
git stash list 查看保存记录
git stash apply 还原保存的修改,不从栈中移除
git statsh pop stash@{x} 还原保存的更改,从栈中移除
git stash clear 清除保存的更改记录
git pull --rebase 服务器本地代码同步更新远程库代码
在执行之前需要查看本地代码有没有修改(git status),若有,先保存修改记录(git stash),更新完成后回复更改(git stash applay),如果没有直接执行。(本地有修改记录更新会出错)
git commit 提交修改
git commit -a 一次性提交修改项
git push origin HEAD:refs/for/远程分支名 把代码提交到临时代码库(为gerrit评审)
git add . 一次性提交修改项和添加项
git add 文件 单独提交修改项或添加项
git rm 文件 提交删除文件
git log 查看远程代码提交记录节点信息(q退出)
git reset --soft id 回退到指定提交位置
git reset HEAD^ 撤销最近一次提交,保留修改,只删掉提交记录
git reset --hard HEAD^ 撤销最近一次提交,修改记录也删掉
git reset --soft HEAD^ 代码提交后(git push)需要回退到提交之前的状态
git checkout 文件名 把修改的或删除的文件回退到原状态
git checkout . 回退全部修改
git branch 查看当前代码所在的本地分支(带有*的为当前本地代码分支)
git branch -b 本地分支名称 远程分支名称 将本地代码切换到远程对应的分支
git checkout -b 本地分支名称 远程分支名称 切换到指定的分支
git chencout 本地分支名称 切换到指定分支
git branch -a 查看所有分支
git diff 查看修改的内容
git diff 文件名 查看指定文件 的修改
reference:
http://www.360doc.com/content/14/0220/17/97538_354256755.shtml repo详解
http://blog.csdn.net/stevenhu_223/article/details/8828130 Git和Repo管理使用简要介绍*
http://blog.csdn.net/luoshengyang/article/details/18195205 Android源代码仓库及其管理工具Repo分析
http://blog.csdn.net/wh_19910525/article/details/8164107 repo的小结
Git和Repo的区别
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
Repo是谷歌用Python脚本写的调用git的一个脚本。主要是用来下载、管理Android项目的软件仓库(也就是说Repo是用来管理给Git管理的一个个仓库的)
Gerrit简介
基于 Web 的代码评审和项目管理的工具,面向基于 Git 版本控制系统;
为 Git 引入强制性的代码审核机制,非特别的授权设置,向 Git 版本库的推送(Push)必须要经过 Gerrit服务器,经过审核流程后,才能正式纳入代码库;
每一次提交将对应一个评审任务;
通过特殊的分支提交评审任务(refs/for/….);
Gerrit 提供的 Git 服务的端口并非标准的 22 端口,缺省是 29418 端口;
Gerrit缺省的Http端口是8080。
gitk
输入gitk指令后,会跳出相应的记录信息的窗口,通过该窗口可以查看其它程序员对本项目的远程代码提交记录。
常见问题
1.缺少changeId无法提交
//如果提交提示:
remote: ERROR: missing Change-Id in commit message footer
remote: Suggestion for commit message:
remote: 20160630-v2
remote:
remote: Change-Id: I00a7de827e1eb4f905693f75dbffdfd7254e064
remote:
remote: Hint: To automatically insert Change-Id, install the hook:
这里报错其实是因为配置的时候没有获取一个“钩子”的东西,因为本地提交到远程版本库的时候中间还要经过一道审核
解决方法:从服务器获取“钩子”到本地,然后再次提交即可:
sudo scp -p -P 29418 xxx@xxx.git.com:hooks/commit-msg .git/hooks/
git commit --amend
2. diff patch
生成标准的patch,只包含diff信息
git diff生成的Patch兼容性强,可以用git apply --check 查看补丁是否能够干净顺利地应用到当前分支中。
例:从master checkout一个新分支修改然后与master对比生成patch。 git diff master > patch
git apply xxx.patch(需要重新commit)
git apply --ignore-whitespace 补丁名:打补丁忽略空格检查。
git撤销打补丁
撤销该补丁的修改效果回到打补丁前代码的状态
命令:patch -R -p1 < my.patch
撤销补丁还有种更方便的方法,将文件还原checkout,但这个是对文件整体的还原,该文件除补丁之外的修改也被还原了。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Jun_P/article/details/126550678