使用eclipse+git插件开发android项目时遇到的问题及解决

1,在eclipse插件中安装好git插件以后,就可以使用git下载代码了。我的代码是在远程服务器上,下载下来的方法是file->import->git->projects form git,然后输入ssh://的路径以及用户名和密码;

2,这时,选择好存放路径的话,就会发现远程代码已经下载到本地;

3,使用eclipse创建一个新的android工程,创建时使用"create project from existing source",这时本就应该在下载下来的git目录内的工程项目的当前目录内,创建工程,即创建.project的文件。但是,我却在这里出现问题,每次想在git目录下的那个工程中创建.project文件时(代码下载下来是没有.project文件的),就发现eclipse会自动在当前workspace目录内重新创建一个新的工程,而不在有代码的那个目录内创建。没办法,只能自己解决这个问题。最后发现,我只要在进入eclipse时,它提示我输入的workspace目录设成和git代码所在目录不一样,就不会出现这个问题了,就会在git目录内有代码的地方创建我的项目了。

4,这时,项目已经正常打开了,然后尝试编译一下,发现报很多错误。但是同样的代码,在别的同事那里就一个错误没有。同事说这是环境配置的问题。然后我就自己去找解决办法。那个错误是说,我的函数应该override自一个superclass,然后我就找到那些函数,发现只要注释掉代码前面的"@override"这句,错误就消失了,因此,我就到项目配置中去研究如何更改配置解决这个问题。具体配置方法是:project->properties->java code style当中的各项展开后取消勾选所有"enable project specific settings",然后还不行的话,把java compiler各项的这个也都取消勾选,然后我再测试时,编译就正常通过了。


5, 在使用 git的时候,我发现有很多需要注意的地方。

Here is a wiki page about git :

http://wiki.elektrobit.com/index.php/GIT_introduction

 

Please follow the instruction to setup your git client environment.

1.       Run ‘git clone <the_git_repo_url_obtained_from_ME>’ in terminal, you will get a copy of the git repo as your local working directory.

2.       ‘cd’ into the directory.

3.       Run ‘git config --global core.editor=<your_favorite_editor>’ to setup a editor for editing the comment for each commit.  **Comma/quotation is NONE required.

4.       Run ‘git config --global user.name=<your_windows_domain_user_name>’ to setup a user name. **Comma/quotation is NONE required.

5.       Run ‘git config --global user.email=<your_FULL_eb_mail_address>’ to setup the mail address for yourself. **Comma/quotation is NONE required.

 

[Brief Introduction]

1.       ‘git commit –a’
Commit all your changes as a single git commit. You can add comments with the editor.

2.       ‘git pull’
Obtain the commits from the server, which pushed by other users

3.       ‘git push’
Upload your commits(changes) to the server

4.       ‘git status’
Check the tracking or caching status

5.       ‘git add <any_file_list>’
Add files to the git tracking list, any changes to the files will be tracked. You can use ‘git commit’ to confirm such changes.

6.       Anything else, check the wiki page.

 

6,使用git还有其他一些需要注意的地方:以下链接可以作为参考:

http://www.jz123.cn/text/2129569.html

 

/

Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版本控制工具可以对开发产生如此之多的影响,文章分为两部分,第一部分介绍Git的一些常用命令,其中穿插介绍Git的基本概念和原理,第二篇重点介绍Git的使用技巧,最后会在Git Hub上创建一个开源项目开启你的Git实战之旅

  Git是什么

  Git在Wikipedia上的定义:它是一个免费的、分布式的版本控制工具,或是一个强调了速度快的源代码管理工具。Git最初被Linus Torvalds开发出来用于管理Linux内核的开发。每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,不依赖于网络和中心服务器。

  Git的出现减轻了许多开发者和开源项目对于管理分支代码的压力,由于对分支的良好控制,更鼓励开发者对自己感兴趣的项目做出贡献。其实许多开源项目包括Linux kernel, Samba, X.org Server, Ruby on Rails,都已经过渡到使用Git作为自己的版本控制工具。对于我们这些喜欢写代码的开发者嘛,有两点最大的好处,我们可以在任何地点(在上班的地铁上)提交自己的代码和查看代码版本;我们可以开许许多多个分支来实践我们的想法,而合并这些分支的开销几乎可以忽略不计。

  Git 1+1

  现在进入本篇文章真正的主题,介绍一下Git的基本命令和操作,会从Git的版本库的初始化,基本操作和独有的常用命令三部分着手,让大家能够开始使用Git。

  Git通常有两种方式来进行初始化:

  git clone: 这是较为简单的一种初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份,例如'git clone git://github.com/someone/some_project.git some_project'命令就是将'git://github.com/someone/some_project.git'这个URL地址的远程版 本库完全克隆到本地some_project目录下面

  git init和git remote:这种方式稍微复杂一些,当你本地创建了一个工作目录,你可以进入这个目录,使用'git init'命令进行初始化,Git以后就会对该目录下的文件进行版本控制,这时候如果你需要将它放到远程服务器上,可以在远程服务器上创建一个目录,并把 可访问的URL记录下来,此时你就可以利用'git remote add'命令来增加一个远程服务器端,例如'git remote add origin git://github.com/someone/another_project.git'这条命令就会增加URL地址为'git: //github.com/someone/another_project.git',名称为origin的远程服务器,以后提交代码的时候只需要使用 origin别名即可

  现在我们有了本地和远程的版本库,让我们来试着用用Git的基本命令吧:

  git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地的master主枝,该功能类似于SVN的update

  git add:是将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步,例如'git add app/model/user.rb'就会增加app/model/user.rb文件到Git的索引中

  git rm:从当前的工作空间中和索引中删除文件,例如'git rm app/model/user.rb'

  git commit:提交当前工作空间的修改内容,类似于SVN的commit命令,例如'git commit -m "story #3, add user model"',提交的时候必须用-m来输入一条提交信息

  git push:将本地commit的代码更新到远程版本库中,例如'git push origin'就会将本地的代码更新到名为orgin的远程版本库中

  git log:查看历史日志

  git revert:还原一个版本的修改,必须提供一个具体的Git版本号,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本号都是生成的一个哈希值

  上面的命令几乎都是每个版本控制工具所公有的,下面就开始尝试一下Git独有的一些命令:

  git branch:对分支的增、删、查等操作,例如'git branch new_branch'会从当前的工作版本创建一个叫做new_branch的新分支,'git branch -D new_branch'就会强制删除叫做new_branch的分支,'git branch'就会列出本地所有的分支

  git checkout:Git的checkout有两个作用,其一是在不同的branch之间进行切换,例如'git checkout new_branch'就会切换到new_branch的分支上去;另一个功能是还原代码的作用,例如'git checkout app/model/user.rb'就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚

  git rebase:用下面两幅图解释会比较清楚一些,rebase命令执行后,实际上是将分支点从C移到了G,这样分支也就具有了从C到G的功能

  


 

  git reset:将当前的工作目录完全回滚到指定的版本号,假设如下图,我们有A-G五次提交的版本,其中C的版本号是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20,我们执行了'git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20'那么结果就只剩下了A-C三个提交的版本

  


 

  git stash:将当前未提交的工作存入Git工作栈中,时机成熟的时候再应用回来,这里暂时提一下这个命令的用法,后面在技巧篇会重点讲解

  git config:利用这个命令可以新增、更改Git的各种设置,例如'git config branch.master.remote origin'就将master的远程版本库设置为别名叫做origin版本库,后面在技巧篇会利用这个命令个性化设置你的Git,为你打造独一无二的 Git

  git tag:可以将某个具体的版本打上一个标签,这样你就不需要记忆复杂的版本号哈希值了,例如你可以使用'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'来标记这个被你还原的版本,那么以后你想查看该版本时,就可以使用 revert_version标签名,而不是哈希值了

  Git之所以能够提供方便的本地分支等特性,是与它的文件存储机制有关的。Git存储版本控制信息时使用它自己定义的一套文件系统存储机制,在代码根目录下有一个.git文件夹,会有如下这样的目录结构:

  


 

  有几个比较重要的文件和目录需要解释一下:HEAD文件存放根节点的信息,其实目录结构就表示一个树型结构,Git采用这种树形结构来存储版本信息,那么HEAD就表示根;refs目录存储了你在当前版本控制目录下的各种不同引用(引用指的是你本地和远程所用到的各个树分支的信息),它有heads、remotes、stash、tags四个子目录,分别存储对不同的根、远程版本库、Git栈和标签的四种引用,你可以通过命令'git show-ref'更清晰地查看引用信息;logs目录根据不同的引用存储了日志信息。因此,Git只需要代码根目录下的这一个.git目录就可以记录完整的版本控制信息,而不是像SVN那样根目录和子目录下都有.svn目录。那么下面就来看一下Git与SVN的区别吧

  Git与SVN的不同

  SVN(Subversion)是当前使用最多的版本控制工具。与它相比较,Git最大的优势在于两点:易于本地增加分支和分布式的特性。

  下面两幅图可以形象的展示Git与SVN的不同之处

  


 

  


 

  对于易于本地增加分支,图中Git本地和服务器端结构都很灵活,所有版本都存储在一个目录中,你只需要进行分支的切换即可达到在某个分支工作的效果。而SVN则完全不同,如果你需要在本地试验一些自己的代码,只能本地维护多个不同的拷贝,每个拷贝对应一个SVN服务器地址。举一个实际的例子,以前我所在的小组使用SVN作为版本控制工具,当我正在试图增强一个模块,工作做到一半,由于会改变原模块的行为导致代码服务器上许多测试的失败,所以并没有提交代码。这时候上级对我说,现在有一个很紧急的Bug需要处理, 必须在两个小时内完成。我只好将本地的所有修改diff,并输出成为一个patch文件,然后回滚有关当前任务的所有代码,再开始修改Bug的任务,等到修改好后,在将patch应用回来。前前后后要完成多个繁琐的步骤,这还不计中间代码发生冲突所要进行的工作量。可是如果使用Git, 我们只需要开一个分支或者转回到主分支上,就可以随时开始Bug修改的任务,完成之后,只要切换到原来的分支就可以优雅的继续以前的任务。只要你愿意,每一个新的任务都可以开一个分支,完成后,再将它合并到主分支上,轻松而优雅。

  分布式对于Git而言,你可以本地提交代码,所以在上面的图中,Git有利于将一个大任务分解,进行本地的多次提交,而SVN只能在本地进行大量的一次性更改,导致将来合并到主干上造成巨大的风险。Git的代码日志是在本地的,可以随时查看。SVN的日志在服务器上的,每次查看日志需要先从服务器上下载下来。我工作的小组,代码服务器在美国,每次查看小组几年前所做的工作时,日志下载就需要十分钟,这不能不说是一个痛苦。后来我们迁移到Git上,利用Git日志在本地的特性,我用Ruby编写了一个Rake脚本,可以查看某个具体任务的所有代码历史,每次只需要几秒钟,大大方便我的工作。当然分布式并不是说用了Git就不需要一个代码中心服务器,如果你工作在一个团队里,还是需要一个服务器来保存所有的代码的。

  总结

  本篇介绍了Git的基本概念、一些常用命令和原理,大家可以尝试动手体会一下,下一篇会重点介绍Git命令的使用技巧,Git附带的工具,最后会在Git Hub上创建一个开源项目,敬请期待


/

7,在我实际开发中,使用git的时候,我发现光使用eclipse或光使用命令行都不是太简便太正确,我觉得两者结合着使用会很爽,下面写一些心得:

1〉在修改代码时,在git commit -a之前,一定先调用git branch查看一下当前是否使用了什么本地分支,如果没有使用本地那个master的分支,那么回头我做的修改似乎都会丢失。所以要用git checkout master来切换成master分支。这时候可以修改我的代码了。

2>修改好以后如果有新增的文件的话,git commit -a是不能把新的文件提交到远程服务器上的,这时,我就重新换回eclipse当中,在eclipse中进行commit,这时会弹出框让我手动勾选新增文件,我勾选好以后,commit,这时就可以把新的文件commit进来了。

3>push的时候,命令行还是eclipse都好吧,但是命令行简单一些,只用git push命令就好了,而eclipse中push的时候,要自己选择source ref 和des ref,这时不要选错,两个都选master,自动变为refs/heads/master,这时就可以push了。

4>push之前一定要pull一下,看看别人有没有更新啥的。然后再pull一下,看看我的代码是不是已经更新到服务器上了。

 

8, 后来遇到的问题是模拟器不能上网,不仅不能访问internet,连我公司172.20.0.0网段的机器也访问不了。但是,同样的配置未做修改,我拿到家里的网络环境中就一点问题没有,直接访问internet没有问题。然后到网上查资料,有人说在adb shell当中进行命令行配置,输入命令getprop,然后可以看到很多参数被列出,然后用setprop去修改里面的配置。我用setprop修改了里面的dns服务器地址,配成和我pc一样的,因为初始都是10.0.0.0网段,然后我都改成172网段的了,然后setprop修改ip地址,也都改成我们这个网段,然后再试了一下,结果仍然不能上网。然后在命令行输入,ifconfig eth0,结果发现模拟器仍然是10网段的ip,然后我就输入ifconfig eth0 172.20.0.199 up,强制进行ip地址变更,结果命令行就再也没有返回,呵呵,我猜是由于ip地址改变,命令行都丢失了对于模拟器的控制,结果用adb devices都找不到模拟器了。结果这种方法也宣告失败。最后我解决该问题的方法是这样的。我把整个环境拿到家里,用命令行方式启动模拟器,./emulator-arm --no-proper(这个参数忘了是怎么写了,就是那个让模拟器用clean方式启动的参数,不加载个人信息的那个),等模拟器启动,这时在命令行会输出几个warning,比如说screen超过屏幕啦,传感器加载有个啥问题啦,然后还出现一个warning,这个warning在公司没有,而只有在家有,就是说找不到一个proxy,然后忽略的一个warning。然后我就想,在家能上网正常,是因为忽略了一个找不到的proxy,那公司不能上网会不会就因为找到了这个proxy,而上不了呢?结果,我到公司一试,还就真是这个问题,模拟器自动添加了我们公司的proxy,但是我们公司proxy是需要用户名密码的,所以怎么也上不去网。现在,我的目的是能上公司内网就行,不想上internet,所以我只要在公司里,让模拟器不使用公司proxy就行了,这就简单了,我只要在命令行乱设一个proxy,让模拟器找不到,它就会报个warning自动忽略的,然后不就成功访问内网了吗?ok,结果我就这样试:./emulator-arm --no-proper --net-proxy=''具体怎么拼我忘了,就是在这里指定一个空的proxy,这时,模拟器报个warning,然后成功访问内网。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值