引言:对于Git的使用已经有一段时间了。不会太多的命令行操作,主要使用基于Android Studio和Eclipse对git进行使用。仓库的创建,代码的提交、更新、冲突解决等等。
时间:2016年7月23日12:12:27
作者:JustDo23
版本:[ Git ][ Windows ][ 2.6.4 ][ 2015-12-14 ]
官网:https://www.git-scm.com/
01. 下载安装
打开Git的官方网站选择自己需要的平台下载最新版的Git并进行安装。
- Android Studio中配置
如果需要在Android Studio或Eclipse等开发工具中进行使用,都需要进行相关的配置。在Android Studio中指定git.exe的安装路径。
配置之后点击界面的Test按钮进行测试。执行成功之后会提示当前安装的Git版本信息。
- 新建项目
在Android Studio中新建一个Android项目。
在Git服务器GitBlit中同样新建一个项目。
在以上截图中,如果选择了加入RedMe或加入.gitignore后期操作会变得复杂。
创建成功之后会跳转一个提示界面。提示学习Git以及提示代码推送操作步骤。
- 仓库连接
服务器仓库建立完成之后,需要在本地建立仓库,同时将本地仓库和服务器的仓库建立连接。
切换到刚才在AS上新建项目的根目录下。
右键 选择 Git Bash Here 。
执行init指令初始化仓库。
git init
执行add指令,将本地仓库与服务器仓库连接。
git remote add origin ssh://[email protected]:29418/JustGit.git
- 配置AS可以使用Git
在配置完成git.exe的路径之后,还需要进行一步操作,配置之后在AS中才会有Git相关的选项。配置如下:
这一步操作其实在其他地方也有可能会遇到,例如,你从别的地方copy了一份含有git的代码。当你利用AS从本地打开该项目之后就会发现没有git相关操行的入口了。此时,进行上述的操作,就可以了。
操作之后,会在AS左下角的工具栏中发现多出一个Version Control的标签。同时,许多文件都使用红色的。这一点是和SVN类似,文件的颜色表明了文件在Git仓库中的不同状态。
- 忽略文件
Git下面有有个.gitignore的文件。这个文件主要是来配置Git将哪些文件进行过滤,进行忽略的。Git是代码版本控制管理的工具,版本控制就是对一个文件进行追踪,进行监控,记录各个版本信息。需要忽略的文件就不需要再进行监控了。
那么,哪些文件需要进行忽略呢?根据个人经验,编译生成的文件,集合环境IDE自动生成的文件等等都可以进行忽略。因为这些文件每更换一个环境就会发生改变。关注这些文件的版本变化,不仅没有任何作用,反而会加重开发者的负担,甚至影响工程的编译和开发。所以忽略这些文件以及忽略文件的配置就显得十分重要。
在AS中切换到Project视图。下图框选的部分都是需要进行忽略的。部分不忽略没有关系,比如gradle文件是可以不进行忽略。
- 配置忽略文件
打开根目录下的.gitignore文件,配置如下
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.idea
# 以下是可以选择的 用#进行注释
/gradle
gradle.properties
gradlew
gradlew.bat
打开app目录下的.gitignore文件,配置如下
*.iml
/build
配置成功之后,被忽略的文件颜色从红色变成了黑色。说明配置成功。
- 添加代码到Git索引
忽略文件配置完成之后,就可以放心大胆的将代码提交到本地仓库了。提交之前需要进行添加追踪,添加索引的操作。因为代码文件颜色还是红色,红色代表没有添加至索引,需要执行add操作。
继续之前的操作,同样在AS的Project视图下,选择项目的根目录,然后在菜单栏中选择 VCS 选择 Git 选择 Add
这里需要注意的是,选中项目根目录之后,后续操作的操作范围就是整个项目目录结构。如果是选择app目录,那操作范围缩小了。也就是说,先用鼠标选择操作范围,然后再执行相应的操作。这一点还是比较重要的。
- 将代码提交本地仓库
将文件添加索引之后,文件的颜色就从红色变成了绿色。继续之前操作,同样选择项目的根目录,然后在菜单栏中选择 VCS 选择 Git 选择 Commit Directory
点击之后,会提示选择需要Commit的文件,以及填写这一次Commit的描述
重要提示,这一步操作的时候,需要认真查看自己提交的代码,确认需要提交的就勾选,否则就不要勾选提交。另外,这里 Git 强与 SVN 的地方,就是提交描述是必须填写的,不填写就无提交。
点击Commit,进行提交,同时会提示一些警告,初学Git的人不用害怕。继续点击Commit
提交成功之后,会在左下角的菜单栏进行提示,界面提示的信息是一定要注意看的。
走到这里不要想着大功告成,代码提交完毕了。在Git中Commit操作只是将代码提交到本地仓库了。将代码提交至服务器仓库,需要通过Push操作才可以。
- 更新服务器代码
走到这一步,我们需要将服务器仓库中的代码进行更新。其实按照上边操作服务器现在仍然是个空仓库,没有任何代码可以进行更新。如果之前勾选了加入RedMe或加入.gitignore,那么更新操作就十分必要了。这一步操作进行更新代码,一方面是为了确保万无一失,另一方面是为了强调更新的重要性,强调在以后的使用过程中不要忘记了代码更新。
在Git中通过Pull操作来进行代码更新。在菜单栏中选择 VCS 选择 Git 选择 Pull
点击Pull之后,进入如下界面
点击ssh连接后边的刷新按钮,提示进行连接,进行ssh安全连接
点击Yes进行连接,同时提示输入密码
很显然,没有任何可以进行更新的文件。同时,我们看到本地仓库和服务器仓库已经切实的建立了连接。
- 将本地仓库代码提交到服务器仓库
上边已经提到,代码还没有提交到服务器仓库中。在Git中通过Push操作来进行代码更新。在菜单栏中选择 VCS 选择 Git 选择 Push
点击 Push之后,会提示之前Commit的记录,将这些Commit的记录push到服务器,同时还会显示每一次的Commit注释。
点击 Push之后,需要输入密码。
点击 OK之后就开始将代码Push到服务器,成功之后,会在右下角有提示。
接下来,打开浏览器,查看刚才提交的记录。
- 小结
走到这一步,完成了git的配置,仓库的创建,忽略文件,代码更新,代码提交等等操作。最重要的就是从无到有,完成了第一次的代码提交。
以上所有操作都是使用管理员账号admin进行操作的。接下来使用另一个账号也就是搭建服务器时候创建的账号just,进行仓库的克隆,代码的提交,更新,冲突的解决等等。
所以明确一下,两个账号相当与两个开发者,通过git仓库URL可以判断使用的是哪个账号。
账号:admin
账号:just
13. 仓库的克隆
克隆服务器仓库到本地需要使用服务器仓库URL进行克隆,打开浏览器,使用账号just进行登录,登录之后可以获取到该账户的仓库URL。
打开Android Studio点击File选择New选择Project from Version Control点击Git
弹出对话框,输入仓库的地址,点击Clone进行仓库的克隆
输入密码,克隆之后,选择使用一个新的界面进行打开
打开刚才克隆的项目之后,会提示Gradle目前没有配置,点击OK进行自动配置
配置结束之后,克隆完毕。可以到磁盘目录查看刚才克隆的项目。
- 克隆方法
除了上边的克隆方法外,还有其他一些路径,总体而言都是大同小异。建议使用上边提到的第一种方法。不推荐使用以下的方法。
第二种方法:
第三种方法:
其实这两种是相同的,只不过路径不同。点击Git之后,同样是弹框提示输入仓库地址,不同的是,Clone之后会提示是否打开,
打开之后会提示进行gradle的配置
配置之后依旧是打不开的,因为没有提交本地SDK路径配置的文件local.properties
所以,以这两种方式clone之后,应该使用open an existing Android Studio Project的方法进行项目的打开。
所以,这两种打开路径并不进行推荐。
- 一个流程
将仓库克隆之后,就可以进行开发。这里简单整理一个操作的流程:
更新服务器代码
进行本地代码开发
开发结束,更新服务器代码
这一步更新之后,可能更新成功,也可能更新失败。
更新失败,可能是本地某个文件有改动,服务器这个文件同样有改动
更新成功或失败,都可以继续往下操作
本地代码Commit
更新服务器代码
本地带Push到服务器
结束
这个流程是笔者自己总结的,也是比较推荐,其中有多次代码更新,也是Pull操作。在多人协作开发的过程中,服务器的代码是随时有可能变更的,可以在浏览器中进行查看,多次更新代码好处多多。
- 实践
使用just账号进行一个流程的实践。
更新服务器代码
在项目中新建一个类JustActivity,当这个类建好之后,会提示将其添加到Git索引
勾选Remember,以后新建的文件会自动添加到索引。添加索引参考以上第八点讲到的知识。
JustActivity的代码如下
/**
* 账号:just
*/
public class JustActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("just", "This is just .");
}
}
更新服务器代码,服务器没有任何变动,这里更新不下东西。更新之后,会在界面左下角工具栏中显示信息,Version Control的标签内显示更新的文件。
Commit操作,参考第九点讲解
更新代码
Push操作,参考第十一点讲解
结束
提交之前需要明确当前用户对服务器仓库是否有权限,没有权限需要进行权限的添加
提交之后,打开浏览器,查看提交的记录。
打开账户admin的项目,进行代码更新。
- 冲突解决
冲突的出现:
修改了同一个文件的不同地方
这种冲突解决比较方便,更新之后会自动进行合并。
修改了同一个文件的同一地方
这种冲突需要手动进行合并。
为了演示冲突的解决,两个账号修改进行同一文件同一行代码,账号admin先提交代码,账号just更新遇到冲突,并进行解决。按照如下操作:
两个账号中MainActivity的代码如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
账号admin在MainActivity中添加一行代码,结果如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("conflict", "This is admin");
}
}
账号just在MainActivity中添加一行代码,结果如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("conflict", "This is just");
}
}
账号admin进行代码的更新与提交。没有冲突,账号admin很轻松的将代码提交至服务器,打开浏览器可以看到提交记录。
账号just进行代码的更新。因为本地文件和服务器文件都有改动。所以提示更新失败了。
账号just进行代码的Commit
账号just进行代码的更新。会弹框提示代码冲突。
同时,可以看到文件中也有进行标识冲突的地方
进行代码合并可以手动在代码文件中进行修改,也可以点Merge进行对比合并。
通过界面的 双向箭头 和 叉号进行代码的合并
点击界面的Apply完成合并
账号just合并结束,没有任何错误的时候,需要进行代码的Commit
账号just进行Push操作,提交代码
打开浏览器查看提交记录
账号admin进行代码更新
冲突解决完毕。合并结果如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("conflict", "This is admin");
Log.e("conflict", "This is just");
}
}
18. 查看历史
如有需要查看某个文件的历史记录,选中文件,右键选择Git选择Show History
- 文件还原
文件还原的功能其实就是用来帮我们后悔,或者是回退的操作。这里举出两个使用的地方:
如有对某个文件进行修改之后,不想将其Commit,希望还原回旧版本,选中文件,右键选择Git选择Revert
对于已经添加add的文件,如果你不想继续对其添加索引,可以进行撤销add,方法就是还原
后记
Git的使用基本完成
对于Git命名行操作,并没有接触太多
Git中的分支操作没有涉及