Android 代码版本控制Git

引言:对于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并进行安装。

02. Android Studio中配置

如果需要在Android Studio或Eclipse等开发工具中进行使用,都需要进行相关的配置。在Android Studio中指定git.exe的安装路径。

配置之后点击界面的Test按钮进行测试。执行成功之后会提示当前安装的Git版本信息。

03. 新建项目

  1. 在Android Studio中新建一个Android项目。

  2. 在Git服务器GitBlit中同样新建一个项目。

  3. 在以上截图中,如果选择了加入RedMe加入.gitignore后期操作会变得复杂。

  4. 创建成功之后会跳转一个提示界面。提示学习Git以及提示代码推送操作步骤。

04. 仓库连接

服务器仓库建立完成之后,需要在本地建立仓库,同时将本地仓库和服务器的仓库建立连接。

  1. 切换到刚才在AS上新建项目的根目录下。

  2. 右键 选择 Git Bash Here

  3. 执行init指令初始化仓库。

     git init
    
  4. 执行add指令,将本地仓库与服务器仓库连接。

     git remote add origin ssh://admin@192.168.1.149:29418/JustGit.git
    

05. 配置AS可以使用Git

在配置完成git.exe的路径之后,还需要进行一步操作,配置之后在AS中才会有Git相关的选项。配置如下:

这一步操作其实在其他地方也有可能会遇到,例如,你从别的地方copy了一份含有git的代码。当你利用AS从本地打开该项目之后就会发现没有git相关操行的入口了。此时,进行上述的操作,就可以了。

操作之后,会在AS左下角的工具栏中发现多出一个Version Control的标签。同时,许多文件都使用红色的。这一点是和SVN类似,文件的颜色表明了文件在Git仓库中的不同状态。

06. 忽略文件

Git下面有有个.gitignore的文件。这个文件主要是来配置Git将哪些文件进行过滤,进行忽略的。Git是代码版本控制管理的工具,版本控制就是对一个文件进行追踪,进行监控,记录各个版本信息。需要忽略的文件就不需要再进行监控了。

那么,哪些文件需要进行忽略呢?根据个人经验,编译生成的文件,集合环境IDE自动生成的文件等等都可以进行忽略。因为这些文件每更换一个环境就会发生改变。关注这些文件的版本变化,不仅没有任何作用,反而会加重开发者的负担,甚至影响工程的编译和开发。所以忽略这些文件以及忽略文件的配置就显得十分重要。

在AS中切换到Project视图。下图框选的部分都是需要进行忽略的。部分不忽略没有关系,比如gradle文件是可以不进行忽略。

07. 配置忽略文件

  1. 打开根目录下的.gitignore文件,配置如下

     *.iml
     .gradle
     /local.properties
     /.idea/workspace.xml
     /.idea/libraries
     .DS_Store
     /build
     /captures
    
     .idea
     # 以下是可以选择的 用#进行注释
     /gradle
     gradle.properties
     gradlew
     gradlew.bat
    
  2. 打开app目录下的.gitignore文件,配置如下

     *.iml
     /build
    
  3. 配置成功之后,被忽略的文件颜色从红色变成了黑色。说明配置成功。

08. 添加代码到Git索引

忽略文件配置完成之后,就可以放心大胆的将代码提交到本地仓库了。提交之前需要进行添加追踪,添加索引的操作。因为代码文件颜色还是红色,红色代表没有添加至索引,需要执行add操作。

继续之前的操作,同样在AS的Project视图下,选择项目的根目录,然后在菜单栏中选择 VCS 选择 Git 选择 Add

这里需要注意的是,选中项目根目录之后,后续操作的操作范围就是整个项目目录结构。如果是选择app目录,那操作范围缩小了。也就是说,先用鼠标选择操作范围,然后再执行相应的操作。这一点还是比较重要的。

09. 将代码提交本地仓库

将文件添加索引之后,文件的颜色就从红色变成了绿色。继续之前操作,同样选择项目的根目录,然后在菜单栏中选择 VCS 选择 Git 选择 Commit Directory

点击之后,会提示选择需要Commit的文件,以及填写这一次Commit的描述

重要提示,这一步操作的时候,需要认真查看自己提交的代码,确认需要提交的就勾选,否则就不要勾选提交。另外,这里 Git 强与 SVN 的地方,就是提交描述是必须填写的,不填写就无提交。

点击Commit,进行提交,同时会提示一些警告,初学Git的人不用害怕。继续点击Commit

提交成功之后,会在左下角的菜单栏进行提示,界面提示的信息是一定要注意看的。

走到这里不要想着大功告成,代码提交完毕了。在Git中Commit操作只是将代码提交到本地仓库了。将代码提交至服务器仓库,需要通过Push操作才可以。

10. 更新服务器代码

走到这一步,我们需要将服务器仓库中的代码进行更新。其实按照上边操作服务器现在仍然是个空仓库,没有任何代码可以进行更新。如果之前勾选了加入RedMe加入.gitignore,那么更新操作就十分必要了。这一步操作进行更新代码,一方面是为了确保万无一失,另一方面是为了强调更新的重要性,强调在以后的使用过程中不要忘记了代码更新。

在Git中通过Pull操作来进行代码更新。在菜单栏中选择 VCS 选择 Git 选择 Pull

点击Pull之后,进入如下界面

点击ssh连接后边的刷新按钮,提示进行连接,进行ssh安全连接

点击Yes进行连接,同时提示输入密码

很显然,没有任何可以进行更新的文件。同时,我们看到本地仓库和服务器仓库已经切实的建立了连接。

11. 将本地仓库代码提交到服务器仓库

上边已经提到,代码还没有提交到服务器仓库中。在Git中通过Push操作来进行代码更新。在菜单栏中选择 VCS 选择 Git 选择 Push

点击 Push之后,会提示之前Commit的记录,将这些Commit的记录push到服务器,同时还会显示每一次的Commit注释。

点击 Push之后,需要输入密码。

点击 OK之后就开始将代码Push到服务器,成功之后,会在右下角有提示。

接下来,打开浏览器,查看刚才提交的记录。

12. 小结

走到这一步,完成了git的配置,仓库的创建,忽略文件,代码更新,代码提交等等操作。最重要的就是从无到有,完成了第一次的代码提交。

以上所有操作都是使用管理员账号admin进行操作的。接下来使用另一个账号也就是搭建服务器时候创建的账号just,进行仓库的克隆,代码的提交,更新,冲突的解决等等。

所以明确一下,两个账号相当与两个开发者,通过git仓库URL可以判断使用的是哪个账号。

  • 账号:admin
  • 账号:just

13. 仓库的克隆

克隆服务器仓库到本地需要使用服务器仓库URL进行克隆,打开浏览器,使用账号just进行登录,登录之后可以获取到该账户的仓库URL。

打开Android Studio点击File选择New选择Project from Version Control点击Git

弹出对话框,输入仓库的地址,点击Clone进行仓库的克隆

输入密码,克隆之后,选择使用一个新的界面进行打开

打开刚才克隆的项目之后,会提示Gradle目前没有配置,点击OK进行自动配置

配置结束之后,克隆完毕。可以到磁盘目录查看刚才克隆的项目。

14. 克隆方法

除了上边的克隆方法外,还有其他一些路径,总体而言都是大同小异。建议使用上边提到的第一种方法。不推荐使用以下的方法。

  • 第二种方法:

  • 第三种方法:

其实这两种是相同的,只不过路径不同。点击Git之后,同样是弹框提示输入仓库地址,不同的是,Clone之后会提示是否打开,

打开之后会提示进行gradle的配置

配置之后依旧是打不开的,因为没有提交本地SDK路径配置的文件local.properties

所以,以这两种方式clone之后,应该使用open an existing Android Studio Project的方法进行项目的打开。

所以,这两种打开路径并不进行推荐。

15. 一个流程

将仓库克隆之后,就可以进行开发。这里简单整理一个操作的流程:

  1. 更新服务器代码
  2. 进行本地代码开发
  3. 开发结束,更新服务器代码
    • 这一步更新之后,可能更新成功,也可能更新失败。
    • 更新失败,可能是本地某个文件有改动,服务器这个文件同样有改动
    • 更新成功或失败,都可以继续往下操作
  4. 本地代码Commit
  5. 更新服务器代码
  6. 本地带Push到服务器
  7. 结束

这个流程是笔者自己总结的,也是比较推荐,其中有多次代码更新,也是Pull操作。在多人协作开发的过程中,服务器的代码是随时有可能变更的,可以在浏览器中进行查看,多次更新代码好处多多。

16. 实践

使用just账号进行一个流程的实践。

  1. 更新服务器代码

  2. 在项目中新建一个类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 .");
         }
     }
    
  3. 更新服务器代码,服务器没有任何变动,这里更新不下东西。更新之后,会在界面左下角工具栏中显示信息,Version Control的标签内显示更新的文件。

  4. Commit操作,参考第九点讲解

  5. 更新代码

  6. Push操作,参考第十一点讲解

  7. 结束

提交之前需要明确当前用户对服务器仓库是否有权限,没有权限需要进行权限的添加

提交之后,打开浏览器,查看提交的记录。

打开账户admin的项目,进行代码更新。

17. 冲突解决

冲突的出现:

  • 修改了同一个文件的不同地方
    • 这种冲突解决比较方便,更新之后会自动进行合并。
  • 修改了同一个文件的同一地方
    • 这种冲突需要手动进行合并。

为了演示冲突的解决,两个账号修改进行同一文件同一行代码,账号admin先提交代码,账号just更新遇到冲突,并进行解决。按照如下操作:

  1. 两个账号中` MainActivity `的代码如下
    
     public class MainActivity extends AppCompatActivity {
     
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
         }
     }
    
  2. 账号adminMainActivity中添加一行代码,结果如下

     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");
         }
     }
    
  3. 账号justMainActivity中添加一行代码,结果如下

     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");
         }
     }
    
  4. 账号admin进行代码的更新与提交。没有冲突,账号admin很轻松的将代码提交至服务器,打开浏览器可以看到提交记录。

  5. 账号just进行代码的更新。因为本地文件和服务器文件都有改动。所以提示更新失败了。

  6. 账号just进行代码的Commit

  7. 账号just进行代码的更新。会弹框提示代码冲突。

    同时,可以看到文件中也有进行标识冲突的地方

  8. 进行代码合并可以手动在代码文件中进行修改,也可以点Merge进行对比合并。

    通过界面的 双向箭头叉号进行代码的合并

    点击界面的Apply完成合并

  9. 账号just合并结束,没有任何错误的时候,需要进行代码的Commit

  10. 账号just进行Push操作,提交代码

  11. 打开浏览器查看提交记录

  12. 账号admin进行代码更新

  13. 冲突解决完毕。合并结果如下:

    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

19. 文件还原

文件还原的功能其实就是用来帮我们后悔,或者是回退的操作。这里举出两个使用的地方:

  • 如有对某个文件进行修改之后,不想将其Commit,希望还原回旧版本,选中文件,右键选择Git选择Revert
  • 对于已经添加add的文件,如果你不想继续对其添加索引,可以进行撤销add,方法就是还原

后记

  • Git的使用基本完成
  • 对于Git命名行操作,并没有接触太多
  • Git中的分支操作没有涉及
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容