Linux下git简单使用教程(以Android为例)
在项目开发过程中,由于经常要修改文件然后共享发布,但我们只是单独改变,拷来拷去比较麻烦。现介绍一点简单的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代替,获得修改信息。