Git和Repo管理使用简要介绍

在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 stash@{x});清除保存的更改记录:git stash clear;

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

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

                  stash@{0}:..............

                  stash@{1}:...............

                        .

                        .

                        .

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

                  stash@{0}:..............

                  stash@{1}:...............:xxx

                        .

                        .

                        .

                  这样,我们就可以根据xxx的标记来执行git stash apply stash@{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 本地分支  远程分支"指令);


android git

在项目版本控制管理中,我想大家都熟悉CVS或着SVN了,对于新兴的git大多人还是抱着观望的态度,本文简单介绍如何在windows下使用git及github仓库管理项目。 (from website ......)

第一,下载并安装git

目前windows版本的git有几种实现,但我们选择msysgit发行版,这是目前做得兼容性最好的。下载地址:http://code.google.com/p/msysgit/downloads/list

下载完成后双击安装文件并按照提示完成git的安装。git的安装过程十分简单,安装完毕后会提示你做初步的配置工作,这里我们全部按照默认值即可(PS:在选择git bash时我选择了类unix提示界面)。

 

第二,创建github账号

github是一个类似sf的免费项目管理及分享的服务平台,要想使用github提供的服务,你必须先注册成为github注册用户。github的网址是: http://github.com

第三,建立本地git仓库

首先,git要求使用者必须提供自己的身份标识,为此我们需要在git bash中执行以下命令:

git config --global user.name 'Mc.Test'
git config --global user.email Test.Mc@gmail.com

其次,选择git仓库目录

我们假设将git仓库目录放在D盘的OPENSource目录下,可以通过在git bash中执行以下命令完成:

cd /d
mkdir OPENSource

注:git bash支持大多linux bash终端命令,你可以自己尝试更多终端操作。

第三,建立项目并初始化git仓库

我们的第一个项目是一个使用Python语言将XML文件转换成Python字典(dict)对象的实现: Python-XML2Dict ,通过执行以下命令完成此步骤:

mkdir Python-XML2Dict
cd Python-XML2Dict
git init

执行此操作后,git将在Python-XML2Dict目录下创建一个隐藏目录(.git),这个目录就是git用来管理软件版本的仓库。

第四,使用git管理项目

现在我们可以开始使用git管理我们的项目了,我们的项目非常简单,只包含3个文件:README、__init__.py和encoder.py。我们将三个文件复制到Python-XML2Dict目录并将其纳入git管理:

#cp /e/workspace/python-module/xml2dict/* .
git add README __init__.py encoder.py
git commit -m "这是我们第一次初始化项目"

git add命令可以将参数指定的文件添加到git仓库索引中,如果你一次添加太多文件可以使用:git add . 命令全部添加。

git commit命令才是真正的将文件添加到git仓库中去,-m选项允许在命令行后直接给出每次添加的简短说明(PS:我们强烈推荐你再每次提交时都给出一个说明,以便项目版本的查阅等),如果没有给出此命令将调用默认文本编辑器以便你添加说明。

第五,将项目提交到github管理

要想将本地的git项目提交到github我们需要先在github添加此项目,登入github主页点击“create a new one"根据提示完成项目创建。刚创建好的项目不包含任何文件,我们需要稍作设置后方可使用。

1,在git bash中执行以下命令创建密钥:

ssh-keygen -C 'Mc.Test@gmail.com' -t rsa

一路按Enter键即可,当然如果你想选择使用密码功能,那么在提示输入密码是选择你自己的密码。
 

2,找到刚才生成的密钥(id_rsa.pub)文件并用文本编辑器打开,然后复制里面的内容。接着转到github站点项目编辑(edit),找到”Deploy keys“选项后点击”add another deploy key“并将刚才复制的内容黏贴保存。

3,测试SSH连接。在git bash中执行以下命令:

SSH -v git@github.com

如果提示你的密钥不正确,那么你需要重新确认上一步的操作是否完整无误。

4,如果上一步测试无错,那么现在就可以将本地的文件提交到github仓库了。在git bash中执行以下命令:

git push origin master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值