首页 > Android > Linux下git简单使用教程(以Android为例)

Linux下git简单使用教程(以Android为例)

2009年9月28日 转烛 发表评论 阅读评论

在项目开发过程中,由于经常要修改文件然后共享发布,但我们只是单独改变,拷来拷去比较麻烦。现介绍一点简单的git命令用于我们的开发。

首先我们知道服务器IP是:10.66.3.200

我们当前最新的代码在机子的目录:/home/user/android-0916

如果我们仅仅想修改某一个工程,如Settings这个package,那么我们可以先从服务器上将其下载下来,命令:

$ git clone user@10.66.3.200:~/android-0916/packages/apps/Settings

这个命令会将代码下载到你本地的当前工作目录下,包括.git文件夹。

在本地,进入Settings目录,你可以利用命令

$ git whatchanged

获得修改的信息,其信息格式一般为:

Commit 22XXXXXXXXXXXXXXX(一串字符)

……..

Commit 11XXXXXXXXXXXXXXXX

………

诸如这样的信息,它会列出哪些文件被修改过。当然你可能更想知道文件的哪些地方被修改过,那么diff命令就可以派上用场

如果直接是git diff,那么是与最近的一次commit进行比较,这就是为什么我们可以直接用git diff命令获得我们修改的代码(注意,前提是我们没有commit过)。

如果想知道更多的修改信息,我们需要用到以下命令:

$ git diff <commit>

如上面的信息,如果利用以下命令:

$ git diff 11XXXXXXXXXXXXXXXX

则可以获得与commit 11XXXXXXXXXXXX的不同信息,利用这个信息,我们就可以很容易地知道文件的哪些东西在哪一次被改变过,从而也使我们有目的地去看代码。

那么,我们修改了代码,同样要commit,这样才能将我们的代码加入到git下。当然commit之前我们需要add进去。还是以Settings为例,假如我们修改了Settings/src/com/android/settings/EthernetSettings.java这个文件,并且还添加了Settings/src/com/android/settings/Ethernet/EthernetProxyConfigDialog.java这个文件,然后准备发布出去,那么我们现在要做的就是如下的工作:

首先,你可以利用$ git status获得当前的git里的信息,它会告知你以上两个文件修改过,但还没有add(或是update)进去,因此我们需要add进去,命令如下:

$ git add –A

这个命令将全部修改(添加)过的文件add进去,当然你也可以单独add,如:

$git add src/com/android/settings/EthernetSettings.java

此时你虽然将其add进去了,但是你需要注意的是仅仅刷新了git,而没有将你修改的内容添加进去,此时,你紧接着需要commit,将内容commit进去,命令:

$git commit –m <commit>

如可以利用下面的命令

$git commit –m “Enable ehternet proxy”

这样你就将你刚刚add进去的文件进行了一次commit,如果你此时利用$ git status获得信息,你在最上面的一行可以看到你自己的commit

进行了commit之后,你就可以与远程的工程进行合并了,命令

$ git push user@10.66.3.200:~/android-0916/packages/apps/Settings

它会将你修改过的内容与原工程进行合并,并且将你的commit加进去,至此完成了代码的修改和合并。

不过,初步试的结果是这个远程push还不行,不知道是不是哪里出问题了。于是可以先将代码ssh上去再进行合并,如下进行:

Scp –r . user@10.66.3.200:. // 将自己的目录拷贝到服务器的home/user下

Ssh user@10.66.3.200 // 登录到服务器

Cd android-0916/packages/apps/Settings // 进入到服务器原目录

Git pull ~/Settings // 将修改后的与原目录合并

以上方法仅是因为远程push暂时好像不能用的才不得已的做法,与git push等效。

那么我们往往又会出现将代码修改得面目全非,需要恢复以前的代码。这样我们就要借助git reset了

刚才我们利用git whatchanged可以得到commit,从而知道修改的信息,那么利用

$git reset <commit>

就可以恢复到你所需要的commit,如:

$git reset 11XXXXXXXXXXXX

就恢复到commit为11XXXXXXXXXXXXXXXXXX的那个修改了。但是我们得知道git reset 默认不修改代码,即commit恢复了,代码并没有改变。

最后可以利用:

$git checkout –f

恢复代码,至此代码可以恢复到最近的commit

因此,如果我们自己没有进行commit的话,直接利用$git checkout –f 就可以恢复到我们下载时的代码,因为那个commit是最近的一次commit。

总结来说,用到的命令有:

Git clone  ,  git status, git whatchanged ,   git diff, git add,  git commit, git push,  git pull,  git reset,  git checkout

即可完成现有的一些工作。

另:

在合并时,最好能先检查一下代码,因为有可能两个人在修改同一个文件,如果修改的是同一个地方,则会出现合并错误(同一文件的不同地方不会出错)。

如果万一你没检查就合并并且出现错误,利用git reset恢复一下,再进行检查后合并。

为了得到带commit信息的patch文件,我们在获得patch时可按以下步骤:
1. 进入到当前目录,改变你的用户名和邮件
   $ git config user.email "your name"
   $ git config user.email "your email"
2. 添加并提交你的修改,这个跟上次git简单使用方法一样
   $ git add xxx.java
   $ git commit -m "what you want to describe"
3. 获得patch
   $ git log  (此处是为了获得你提交修改的上一级commit信息,如2xxxxxx)
   $ git format-patch 2xxxxxxx  (获得带有commit信息的patch文件)
4. patch文件默认在你当前目录下,可以自行查找并修改文件名。
5. 将上述patch文件打到自己的目录下
   $ git am xxx.patch (这样你的目录下就有了commit信息)
6. 另:原来打patch使用patch -p1 < xx.patch 较为复杂,其实,在git下有
   $ git apply xx.patch  (可以打patch,不带commit信息)
   再另:上次写的git whatchanged可以直接用git log代替,获得修改信息。

分类: Android 标签: , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.