说明:
- 本博客是为了给刚接触git工具,想要使用git bash来上传代码的童鞋。
- 本博客将会教大家如何使用git bash命令行来将自己的android项目代码上传,
在上传的同时忽略掉一些不必要上传的工程文件。 - 其中补充了一些Android Studio项目结构和文件忽略的知识,给自己扫个盲,已经了解的童鞋可以直接跳过。
前提:
- 已有Github账号。没有的话自己去注册一个。
- 已有一个建立好的Android工程
- 已在电脑上安装好git bash,并且已配置好用户身份。
配置用户身份,就是在刚刚安装好git工具之后,打开Git Bash,敲入两条命令:
git config--
global user.name “你的名字”
git config--
global user.email “你的邮箱地址”
这样就配置好了。这里你的名字最好是英文的,中文不造可不可以,而且如果用
中文名字,切换输入法也挺麻烦的,所以机智的人选择英文!哈哈!
配置好之后,你还可以通过命令
git config--
global user.name和git config--
global user.email
来查看自己配置好的用户名和邮箱地址。
步骤如下:
1. 首先找到你已经建立好的android工程目录,比如我的工程Android_Lab,
如下图:
然后右键Android_Lab,选择Git Bash Here,出现一个Git Bash命令行窗口
由于我已经将此目录初始化为git本地仓库,所以图上命令头末尾出现”(master)“,它表示本地仓库的分支是master.
2. 接下来敲入命令
git init
建立一个本地仓库
由于我已经进行过此操作,所以结果显示重新初始化已存在的Git仓库。如果是首次操作,应该显示
这是我从别人博客上拷贝过来的,就是看看效果。
3. 仓库建好后就可以上传代码了,但是上传代码的时候,git默认会将工程下的所有文件包括生成的工程文件都上传,而有些文件根本没有必要上传,上传了以后进行版本管理也很麻烦!这种情况下,就需要使用.gitignore文件来忽略这些文件了。
.gitignore文件的生成有很多种方式,Android Studio实际上会默认添加一个,github上也可以根据你建的工程添加相应的gitignore,还有专门的网站可以生成相应语言的gitignore等等。这里我就说明一下我所使用的方法,其他方法有兴趣可以研究看看。
在编辑.gitignore文件之前,我们需要先了解一下android项目结构,才能知道哪些文件可以忽略。
关于Android Studio项目结构
Android Studio的一个project(项目)下可以包含多个独立的module(模块),图中Android_Lab便是一个项目,app便是一个module.
我们来看一下android工程目录下都有哪些文件:
.git 这是你初始化的本地仓库,包含一些配置信息等。
.idea 项目创建时自动生成的,存放项目的配置信息,包括历史记录,版本控制信息等。
app 名字为 app 的模块
app/src 源码文件夹
app/src/java 放置代码文件
app/libs 放置 .jar 库
app/proguard-rules.pro 混淆规则配置文件。有需要就上传。关于proguard-rules.pro
build.gradle 和 app/build.gradle :
gradle项目自动编译的时候要读取的配置文件。比如指定项目的依赖包等。build.gradle有两个,一个是全局的,一个是在模块里面。
全局的build.gradle主要设置的是声明仓库源,gradle的版本号说明等。
app/build.gradle 设置了模块的gradle构建配置。关于两个build.gradle文件的区别请参考这里
gradle文件夹:
这里面有两个文件,gradle-wrapper.jar和gradle-wrapper.properties,它们就是gradle wrapper。gradle项目都会有,你可以通过命令gradle init来创建它们(前提是本地安装了gradle并且配置到了环境变量中)。
gradle/wrapper :
task利用此文件夹下的gradle-wrapper.properties来下载指定的gradle。
gradle.properties:
gradle的运行环境配置。这里面可以定义一些常量供build.gradle使用,比如可以配置签名相关信息如keystore位置,密码,keyalias等。 关于配置gradle.properties
gradlew和gradlew.bat :
这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据
gradle-wrapper.properties文件自动完成gradle环境的搭建。这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle。
local.properties :
配置SDK或者NDK的环境路径,各个机器上这个变量可能都是不一样的,所以不应该进入版本库
settings.gradle:
整个项目的管理,比如这个项目包含哪些模块等。
*.iml :
iml是Intellij模块文件。Intellij是一款JAVA的IDE。Android Studio是基于开源的Intellij IDEA开发出来的IDE。
关于文件忽略
在工程目录中,一般需要忽略的文件如下:
1、.idea文件夹
2、.gradle文件夹
3、所有的build文件夹
4、所有的.iml文件
5、local.properties文件
对于要保留的文件,我比较过github上的仓库代码,发现除了app文件夹以外这几个文件基本上都有保留。
对于app文件夹下的内容
个人认为,app/src和app/build.gradle需要上传,app/build/和app/app.iml文件一般不上传,app/libs和app/proguard-rules.pro根据实际需要而定。
具体到app/src文件夹下的内容
可以看到app/src/androidTest是UI测试代码,app/src/test是Junit部分的单元测试代码。这两个文件夹根据项目实际情况上传。app/src/main是项目主要文件所在目录,一般要上传。
了解了需要忽略哪些文件以后,我们就可以开始编辑.gitignore文件了。
(1)首先在刚才打开的Git Bash里面敲入命令
vim .gitignore
创建一个名为.gitignore的文件
(2)然后在里面编辑你要忽略的文件或文件夹的名称,一行输入一个文件/文件夹,可以使用通配符*来忽略相同特征的文件。
如 *.properties,就会忽略工程根目录下所有以properties为扩展名的文件了。具体要忽略哪些文件得看你的工程目录下都有哪些文件了。
比如我的像这样
(3)编辑完以后按ESC,然后敲入:wq保存并退出。
这样.gitignore文件就建好了,同时就定义好了上传代码时的文件忽略规则。
4. 接下来我们就可以放心地上传工程代码了。在Git Bash里面敲入
git add .
这条命令的意思是将工程下面的所有文件添加到git本地仓库中,但是由于我们前面已经定义好了忽略文件的规则,所以可以放心地使用这条命令了。
关于.gitignore文件的编辑还有一些其他的技巧,基本用法上面我描述的已经够用了。这里给出其他技巧的参考。.gitignore文件编辑技巧
5.然后接着敲入命令
git commit -m “commit info”
这里的commit info是提交信息,简单描述下这次commit的内容,以便以后查看的时候知道这次commit是做了什么。必须要填!自由填写,备注这条commit信息而已。
我这里显示的是没有东西可以commit,因为我已经全部上传过了。正常情况下应该是这样的:
commit以后,代码就已经同步到git本地仓库了。但是还没有提交到远程的仓库,远程仓库就是github上你自己建立的仓库。
6.接下来我们需要在Git bash里先添加一下远程仓库.
(1)首先要获取远程仓库的仓库地址,登录github,找到自己新建的那个仓库。这里为了演示,我在我的github上新建了一个Test仓库。
(2)然后复制图中的仓库地址。这里的地址有两种形式,https方式和ssh方式,https方式可以直接复制使用仓库地址。如果是ssh方式,则还需要事先设置好ssh密钥。我用的是ssh方式,这里给出ssh设置密钥方法参考。Git ssh配置密钥方法
(3)然后回到Git Bash,在里面敲入
git remote add origin git@github.com:你的github账号名/你建立的仓库名.git
我这里提示说远程仓库origin已经存在,是因为我之前已经添加过了。
遇到这种情况可以先把这个仓库移除再重新添加。具体做法是在Git Bash里敲入
git remote rm origin
再敲入
git remote add origin git@github.com:你的github账号名/你建立的仓库名.git
这样就可以了。这里我用的账号名是lois00,仓库名是我刚刚创建的Test.
说明一下:origin是默认的远程库的名称,master是默认使用git init初始化的本地主分支的名称,一般情况下不去更改。
至此远程仓库已经添加好了。
7.接着我们就要把代码上传到远程仓库了。敲入
git push origin master
出现了问题,说是无法push到远程仓库,因为远程仓库里含有一些文件没有同步到本地仓库。这时我们需要先pull再push。具体做法是先敲入
git pull origin master
再敲入
git push origin master
如果看到下面的结果就说明上传成功了。
8.最后我们到github网站上查看一下上传的结果。
可以看到已经成功将工程代码上传了,而且忽略掉了那些不必要的文件。
有的童鞋想问如何在一个仓库里管理多个工程代码,比如一个Test仓库里如何放置lab1,lab2,lab3的项目代码。这里我给出一个最简单的解决办法。那就是直接在你的android studio工作目录下,也就是存放工程项目的目录下,分级建立好文件夹,就像这样,
为每个独立的项目套上一层文件夹,这样git在上传代码的时候,就会连着文件夹一起上传。或者你在Android Studio里面创建工程的时候,为每个工程新建一个包来管理它,像这样
这样的直接结果也是在android studio工作目录下创建文件夹来管理它,效果一样。
这样分层管理以后,上传的结果就是这样:
这样看着是不是比零散的文件舒服多了!而且便于管理,一个仓库下面就可以放好多个工程。
到此,说明完毕!!
下面我给出一些使用Git Bash上传代码过程中常见问题的解决方法:
Git错误non-fast-forward后的冲突解决
github常见操作和常见错误!错误提示:fatal: remote origin already exists.
fatal: Could not read from remote repository.的解决办法
git 添加 gitignore 规则无效
git无法pull仓库refusing to merge unrelated histories