Git和Repo管理使用

Git和Repo管理使用简要介绍

http://blog.csdn.net/stevenhu_223/article/details/8828130

在Linux平台下进行Android系统项目开发时,需要git或repo管理。

一.
Git和Repo的区别:

1. Git:Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

2. Repo:
Repo是谷歌用Python脚本写的调用git的一个脚本。主要是用来下载、管理Android项目的软件仓库(也就是说Repo是用来管理给Git管理的一个个仓库的)

二.
Git库管理项目:

1. 一般在企业的Android开发中,公司会给程序员分配一个远程服务器,企业本身也有一个代码库(该代码库集合了公司各种不同手机项目的Android系统代码)。程序员可以在自己的远程服务器上,从公司的代码库下拉相应的手机项目代码,然后进行基于Android源码的开发、维护、模块单编译(mm)、全编译(make
-j4)等各种企业需求的开发工作。

2.
程序员开发完成需求时,需要将开发成果保存在公司的代码库,而这个保存的过程是需要一系列的安全性工作的。首先,程序员开发和维护的成果,需要经过项目负责人(主管、经理、总监之类)的评审、验证才能最终提交到公司的代码库。

3. 这个代码评审、核查的过程,由Gerrit(代码评审工具)实现:

Gerrit简介:

1). 基于 Web 的代码评审和项目管理的工具,面向基于 Git
版本控制系统;

2). 为 Git 引入强制性的代码审核机制,非特别的授权设置,向 Git
版本库的推送(Push)必须要经过 Gerrit服务器,经过审核流程后,才能正式纳入代码库;

3). 每一次提交将对应一个评审任务;

4). 通过特殊的分支提交评审任务(refs/for/….);

5). Gerrit 提供的 Git 服务的端口并非标准的 22 端口,缺省是
29418 端口;

6). Gerrit缺省的Http端口是8080。

4. Git常用指令操作:

1). 查看当前代码修改状态:git status。如下图:
注:MSM7x27A-ICS-AP为整个Android系统源码所在主目录

上图输入git status指令后,显示的是你之前更改的代码文件(包括文件所在路径)

2). 查看当前项目远程代码库的提交记录:gitk

输入gitk指令后,会跳出相应的记录信息的窗口,通过该窗口可以查看其它程序员对本项目的远程代码提交记录。

3). 保存更改的代码状态:git stash (或者git stash save "命名");查看保存记录:git
stash list;还原保存的更改:git stash apply (或者git stash [email protected]{x});清除保存的更改记录:git stash
clear;

执行git stash 指令后,再执行git
status查看代码更改状态,之前modified的代码记录将不会显示,代码回到更改之前的状态。

执行git
stash指令后,再执行git stash list,将看到如下的信息:

[email protected]{0}:..............

[email protected]{1}:...............

.

.

.

[email protected]{0}开头为最近的一次保存记录。有时候为了方便记忆和还原我们需要还原的修改记录,这时候git stash save "xxx"
(xxx由自己命名)就派上用场了,执行该指令后 ,我们再执行git stash list,将看到类似如下信息:

[email protected]{0}:..............

[email protected]{1}:...............:xxx

.

.

.

这样,我们就可以根据xxx的标记来执行git
stash apply
[email protected]{1} 还原我们之前保存的更改记录了。

4). 服务器本地代码同步更新远程库的代码:git pull
--rebase ;

在执行git pull
--rebase更新代码之前,需执行git status查看当前本地代码有没有修改记录,若有,则执行git stash 保存修改记录,更新完后执行git
stash apply恢复更改;如没有,则直接执行git pull
--rebase;(如果本地有修改记录,则更新会出错)。

5). 一次性提交修改项(modified):git
commit -a;接着执行"git push origin
HEAD:refs/for/远程分支名",把代码提交到临时代码库(为通过评审),然后登录Gerrit,添加评审人员(Add
Reviewer),通过评审,提交到公司远程代码库;

6).
一次性提交修改项(modified)和添加项(add):git add .  (注意有小点); 单独把修改项或添加项提交:"git add
文件(包括所在路径)";

7). 提交删除文件:git rm

8). 查看远程代码提交记录节点信息:git log
(按q字母退出);  执行git log后会得到提交记录信息和相应的commit
id值,如果需要回退到该程序员修改提交的记录信息时的代码,则执行"git reset --soft
id值";

9). 若代码提交后(已经执行git push ...
操作),需要回退到提交之前的状态:登录Gerrit-->找到自己提交的Changes-->选择Abandon
Change-->回到远程服务器代码终端操作,执行git reset --soft
HEAD^

10). 把修改或删除的文件回退到原状态:"git
checkout 文件名(包括路径)";回退全部:git checkout .
(注意有小点)

11).
查看当前代码所在的本地分支(带有*的为当前本地代码的分支):git branch

12).将把地代码切换到远程对应的分支:"git
checkout -b 本地分支名 远程分支名";

如执行git
branch后出现如下信息:

*
name1

name2

name1为当前代码的本地分支,name2为之前已经切换到自己对应的远程代码分支的本地分支。这时候,如果需要从name1切换到name2,那么就不需要再执行git
checkout -b name2 yyy(yyy为远程分支名)指令了,直接执行git
checkout name2;就可以实现切换到name2分支;

13). 查看所有分支(包括本地和远程):git branch
-a;

三. Repo管理:

Repo实现管理多个git库,一般是多个项目共用一个主分支,而针对项目共用主分支的代码都可以在overlay目录里开发、维护(overlay目录所在远程分支为对应项目的分支,而不是当前共用的主分支);然后提交到对应的项目代码分支;

1.Repo 相关脚本下载操作,相关匹配完成后;下拉Repo管理的项目代码:repo init -u gitserver:manifests.git
-m xxx.xml (xxx.xml文件决定初始化的项目)-->repo sync--->创建xxx项目对应的分支:repo start xxx
--all

(--all意为将所有模块都归为当前xxx分支下)

2. 查看当前项目代码所在的分支:repo branch;

3.查看当前项目相应目录代码所在的分支情况(可能共用主分支或者在自己的分支),如查看framework/base下的代码所在分支情况:执行
cd framework/base
进入base目录-->执行git branch -a查看;如查看package/apps/Music系统应用模块所在的分支情况:
执行cd package/apps/Music--->执行git
branch -a;

4.删除不用的本地分支:“repo abandon 分支名” (同“git branch -d
分支名”)

5.自动查找项目所在的分支(在没执行repo start xxx --all的情况下),然后进行切换:repo forall -c git
checkout -b xxx 项目对应的远程分支名(最好是本地分支和远程分支同名,除主分支外)

6.Repo实现切换分支:执行cd .repo/manifests--->执行ls查看项目对应的xxx.xml文件--->执行cd
-回到主目录--->执行repo sync同步更新代码--->执行”repo start xxx(本地分支名)
--all“创建相应的本地分支(或者执行"repo -c -p git checkout 本地分支
 远程分支"指令);

Git和Repo管理使用,码迷,mamicode.com

时间: 2024-11-07 11:50:57

Git和Repo管理使用的相关文章

Git与Repo入门

版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文件,保存文件副本.有时候偷懒省事,保存副本时命名比较随意,时间长了就不知道哪个是新的,哪个是老的了,即使知道新旧,可能也不知道每个版本是什么内容,相对上一版作了什么修改了,当几个版本过去后,很可能就是下面的样子了: 二.本地版本控制 手工管理比较麻烦且混乱,所以出现了本地版本控制系统,记录文件每次的

【转】Git与Repo入门----不错

原文网址:http://www.cnblogs.com/angeldevil/p/3238470.html Git与Repo入门 版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文件,保存文件副本.有时候偷懒省事,保存副本时命名比较随意,时间长了就不知道哪个是新的,哪个是老的了,即使知道新旧,可能也不知道每个版本是什么内容,相对上一版作了什么修改了

【转】Android源码学习(2)使用Git和Repo进行版本管理

原文网址:http://blog.chinaunix.net/uid-26074270-id-2458828.html Android项目采用Git和Repo进行版本管理.在大多数情况下,Git都可以满足用户的需求.然而,由于Android项目过于庞大,想要简单.高效的管理这一百多个Git库,并不是一件容易的事情.Repo正是基于此需求,对Git命令部分封装,用来简化一些跨网络的操作. 安装Repo 创建repo所在的目录,并将目录加到PATH环境变量中 $ mkdir ~/bin $ PATH

学习使用Git 版本控制 代码管理

Git 版本控制 学习教程 Git版本控制器,可以作为程序员.计算机科学和软件工程的研究人员在编写代码.工程开发过程中的文件管理和代码管理的工具.在基本的Git Bash和Git GUI之外,有很多在MacOS.Linux和Windows下的Git 管理工具以可视化的方法辅助版本控制和代码控制. 在我的实际工作和学习中,需要用到Git实现本地代码的版本管理和代码控制,在坚果云上进行代码同步和迁移,使得实验室的台式机和个人笔记本上都有最新版的代码,并且可以记录每天修改和新增代码的进度. 由于jav

基于git的源代码管理模型——git flow

说明: 本文以nvie的“a successful git branching model”为蓝本,结合我个人理解写成.如有谬误,还请各位指出.多谢! Note: This article is highly based on nvie's a successful git branching model. Thanks nvie. Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践.Git Flow是一套使用Git

Git学习 -- 标签管理

新建标签 git tag <tagname>   默认为HEAD,也可以指定一个commit id eg.   git tag v0.9  git tag v1.0 31aa59c git tag <tagname> -m "xxx"   可以指定标签信息 git tag -s <tagname>             可以用PGP签名标签 查看标签 git tag     查看所有标签 git show <tagname>    参看

git 实现分支管理项目,是羡慕管理更高效;

利用git 的分支管理的能力实现更有章法的协同开发的模式: 其实在我们进行 git init 时就创建了 master 的主分支: 那现在我如何建立第二个分支呢? :git branch local 初始时分支的内容是完全和主分支是一样的,在分支中所有的操作都不影响主分支里的情况,你可以在其中做任何修改: 如何查看分支呢? :git branch local * master 星号是表示当前所在的分支:其实两个分支一模一样,只是大家都是把master当作主分支的: 如何切换分支呢? :git c

Git Gerrit Repo User Manual

                  Git Repo Gerrit User Manual Revision History   Revision # Description Date Author 0.1 Initial this document 2014/09/05 Deman Lu 0.2 Add First time push Code to Gerrit 2014/09/09 Deman Lu 0.21 Add FAQ 2014/09/09 Deman Lu Contents Pre

VS2015 Git 源码管理工具简单入门

1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Meger) 获取(Fetch):从远程版本库获得最新版本 合并(Meger):将两个版本库进行合并操作 提交(Commit):将所做的更改,存入本地暂存库 推送(Push):将所做的更改,存入远程版本库 同步(Pull+Push):先将远程库拉取,再将本地库推送到远程库,相当于(Pull+Push) 变基到(Swi