Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93118
  • 博文数量: 27
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-07 15:39
个人简介

好好学习 ,天天向上

文章分类

全部博文(27)

文章存档

2013年(27)

我的朋友

分类: Android平台

2013-03-20 15:10:32

一  git
1    git    log    -2  .   //查看当前目录下的最后两个log    
    
2    git    config    --l    //查看当前git仓库的信息; 包括当前分支跟踪的是远端的哪个分支

3    git    config    --list  //同上

4    git    push    origin    本地分支名:远程分支名//把本地分支的更改push到远程分支

5    git    checkout    -b    本地分支名    远程分支名  //新建本地分支,该分支追踪远端分支

6    repo    forall    -pcv    git    log    --since="yyy-mm-dd"    --until="yyyy-mm-dd"  //对所有仓库查看从 since到until的log

7    git    stash  //git pull 有冲突时 先将本地修改stash  ; pull结束后再 git stash  pop 将stash的内容pop出来  ,如果stash的内容要重复多次用,就不能用git stash pop ,要用git stash apply 
    
8     git    config    –global    alias.co    checkout // co将会成为checkout的别名

9     git    config    –global    alias.ci    commit

10    git    config    --global    color.ui    true  //git命令输出开启颜色

11     关于从A代码里面打包,放到B代码的问题
1)    在A代码里面  
         git    diff    <起始哈希值>    <终点哈希值>    >    A.patch

          在B代码里面
          git    apply    A.patch
//这种方法A中  git commit 的log不会到B中去

2)     A代码里面
            git    format-patch    -    <分支名>    -o <路径>
          在B代码里面
          git    apply    A.patch
//这种方法A中  git commit 的log会到B中去


12     git     format-patch     commit-id     -x  
//生成从commit-id 开始往前(时间上往前,在log上看是向下走)的x个补丁这x个补丁是按时间顺序升序排列;也就是说第一个编号(0001)的补丁应该是从commit-id开
//始往下数x个log的那个补丁, 最后一个编号(000x)的补丁才是commit-id对应的那个补丁;   如果不加x参数,那么生成的是从时间上最后的一个commit-id到最早一个
//commit-id的所有补丁

13    git    diff    //比较working area 和 追踪的分支的差异
        git    diff    master //比较当前工作区和master分支的区别 (对照下一条命令,这里的master应该指的是本地checkout的master分支)
        git    diff    refs/remotes/origin/master   //比较当前工作区和  远程master分支的区别
        git    diff    commit-id    xxx.cpp    //拿当前工作区的某个文件比较某次提交 ;输出结果仅仅是这个文件的比较
//输出结果说明:
//一般都已当前工作区的文件为目标文件

//-开头的行,是只出现在源文件中的行

//+开头的行,是只出现在目标文件中的行
//以下为http://blog.csdn.net/sheismylife/article/details/8044796的一个例子
//这个结果说明当前工作区的 .cpp文件相比这个commit-id的文件 仅仅是多了一个time_measure.h的头文件

  1. diff --git a/data_service/src/socket_helper.cpp b/data_service/src/socket_helper.cpp  
  2. index d606452..047e213 100755  
  3. --- a/data_service/src/socket_helper.cpp  
  4. +++ b/data_service/src/socket_helper.cpp  
  5. @@ -4,6 +4,7 @@  
  6.  #include "data/login_response.h"  
  7.  #include "data/heartbeat_response.h"  
  8.  #include "helper/parser.h"  
  9. +#include "helper/time_measure.h"  
  10.  #include   
  11.  #include "exception/socket_error.h"  
  12.  #include "exception/data_error.h"  




14    git的三个状态(详见git权威指南P74  非常详细)
working area   工作区 
stage              暂存区
reposity          仓库(版本库  本地)
    git    diff    //没有任何参数,比较的是 working area 和 stage 的区别
    git    diff    --cached (或者--stage)  // 比较的是暂存区 和 版本库的区别
    git    diff    HEAD   //比较的 工作区  和 仓库(本地版本库)的区别

15    如果提交时的用户名和邮箱有误,可以用下面命令更改
git    commit    --amend    --author='lazy_mouse    '      

16    .git/refs/heads/branch_name  这个文件始终记录的是 git log  的最后一条提交的commit-id  (验证过,确实是这样,一旦有新的提交,那么这个文件就立马变成最新提交的id)          
// 书中有讲 .git/refs 是保存引用的命名空间, 其中 .git/refs/heads目录下的引用又称为分支 // 做实验是 本地只有一个default分支,所以heads下只有一个default文件,该文件的内容只有一行(commit-id) ,这个commit-id始终是最新的log的id;  对于分支,既可以用正规的长格式的表示方法,如refs/heads/default, 也可以去掉签名的两级目录用default表示  也就是说 git diff default   和 git diff  HEAD  和   git  diff   refs/heads/default 是等价的

17    恢复reset --hard    ( git    reset    --hard    commit-id 也是有补救滴)
1)    git    reflog   输出如下:(这个东西的路径在.git/logs/refs下面 下面有heads 和remotes )
516c242 HEAD@{0}: HEAD^: updating HEAD
aa7787f HEAD@{1}: commit (amend): test add a empty line in envsetup.sh
98baba7 HEAD@{2}: commit: test add a empty line in envsetup.sh
516c242 HEAD@{3}: checkout: moving from 516c242b31f81c2308a868323f87c0da5ce16756 to default_android-4.1.1_r3

 2)
    在git   reflog的输出中可以看到,最后一次的操作是 updating HEAD 这里执行的其实是reset     --hard    HEAD^ ; 现在想要恢复该操作,就需要将HEAD重置到HEAD@{1},
        git    reset    --hard    HEAD@{1}
//git中 HEAD 指向的是应该是最新的commit-id ,也就是执行git    log 时最上面的那条log对应的id ,HEAD^是其父提交,也就是向下数一个commit,依次 HEAD^^是父父提交,最多好像可以有三到四个^^


18    git    checkout命令执行时最好带上路径,省的出现detached HEAD的问题
git checkout .
    
二  repo

1    用repo sync 在抓去 android source code 的时候,会经常出现一些错误导致 repo sync 中断,每次都要手动开始。 可以用如下的命令,来自动重复:  
       $?=1;   while [ $? -ne 0 ] ; do  repo sync ; done


2    repo     forall    -c    'rm -rf .git/rebase-apply;'    git    reset    --hard;    git    checkout    -f    m/osc'        
//删除repo sync时冲突的, 然后reset , 在强制切到m/osc分支 ;  //该命令尚不完全明白

3    repo    start    base    --all  //所有仓库都切到base分支,base分支是manifest中指定的默认分支(由revision指定)

4    repo    abondon    base   //所有仓库都删除base分支

5    repo    init    -u    git://android.git.kernel.org/platform/manifest.git    -b    release-1.0
// -u 参数指定一个URL, 从这个URL 中取得repository 的 manifest 文件
// -m 参数来选择 repository 中的某一个特定的 manifest 文件,如果不具体指定,那么表示为默认的 namifest 文件 (default.xml) 
// -b 参数来指定某个manifest 分支


6    repo    uploade    .    //上传 ./的变更到gerrit , gerrit review 后才会真正到服务器上

7    repo    branch  //查看所有仓库的分支信息

8    repo    status //查看所有仓库的status

9    repo    sync    ./ //拉本目录  如果是意外删除了某个工程,就应该是  repo    sync  hardware/libharedware_legacy

10    repo    diff    //查看哪些文件夹下都做了改动

11   repo upload 后发现错了, 更改办法(没有试过)

(1)在原有分支上修改文件
(2)git commit --amend 
(3)repo upload --replace <工程名>
(4)出现文件以后去掉第1行的#,中括号里面填上 change-id

12    
        









阅读(5782) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~