zoukankan      html  css  js  c++  java
  • 版本控制Git研究二

    经过好几周的工作忙碌,终于可以有时间静下心来学习东西了,做为崇尚技术的人来说,应该是最幸福的时光了,呵呵,当然也是宅神的表现啦,话不多说,继续git的学习,上次已经对git的一些概念进行了说明,具体可以参考:http://www.cnblogs.com/webor2006/p/3574700.html ,这次来以实际的操作,对git在实际工作中的使用进行进一步阐述。

    下面分两种角色进行学习:Git的个体工作者(也就是使用者)和Git的仓库管理员:

    Git的个体工作者(也就是使用者):

    • 基本操作
      ① 初使化和建立项目,有两种方式:
      本地仓库:

      关于这个操作,已经在上节博文中有介绍过,这里就不多说了。

      远程仓库:

      具体我们来实验下:


      实际上,对于远程仓库,可以查看它的仓库名:

      而这相当于是远程仓库的别名,实际上可以查看其真实仓库地址:

      而如果是本地仓库呢?看是否也能显示这些信息,先回到本地init的仓库目录:

      当然不能显示了,因为是本地的仓库,不是远程仓库
      ②add & commit:
      为了便于命令的学习,git官网提供的远程地址不是太稳定,所以在oschina中我建一个自己的git远程仓库,方便学习:


      【说明】:oschina开源中国社区团队推出的基于Git的快速的、免费的、稳定的在线代码托管平台
      这时,通过git status来查看一下当前仓库的状态:


      这时,我们将其添加到版本库中:

      这时再将文件提交到我们的本地仓库中:

      ③Ignore file(忽略文件):
      在svn中,我们也有忽略文件的功能,也就是想忽略掉不想提交的文件,在android开发中,经常会有bin,gen目录,而每次的改天这些目录的文件都会变化,所以应该忽略掉它们,所以,下面用实验来模拟这种场景,新建两个文件,让其中一个忽略,另外一个可以提交:

      那在git中是如何忽略文件的呢?实际上是建立一个忽略文件,然后将你想忽略的文件加入到里面,步骤如下:

      然后将要忽略的文件添加进去:

      这时,提交真会如我们所愿,bin.dll文件会被忽略,而bin2.dll应该能被提交?


      ④diff(文件比较):
      在敲比较命令之前,先说明一个概念:
      git diff -staged:它比较的是working directory和staging area之间的区别
      git diff -cached:它比较的是staging area和git directory之间的区别
      下面用实验来说明:
      先修改一个文件:



      这时候,我们执行git add ,将其添加到staing are区域:

      其实gid diff默认就是git diff -stagged
      下面,再比较staging area和git directory两者的区别:

      【说明】:关于working directory、staging area、git directory三者的概念,可以参考博文:http://www.cnblogs.com/webor2006/p/3574700.html
      ⑤reset:恢复到之前版本
      关于这个命令,平常用得不多,可用checkout来代替,这个之后会学习到,所以先暂且不用理解。
      ⑥rm,mv:删除与移动

      这时我们查看一下状态:

      【注意】:这里是删除了staging area索引中的文件,但并未真正从git directory本地仓库中删除,所以还可以从本地仓库中checkout出来,将删除的文件还原

      如果想真正的从本地仓库删除,则需这样做:

      再查看一下状态:

      对于mv操作,基本类似,想要改变仓库则最终需要提交一下,这里就不多说了。
      ⑦log、whatchanged:查看日志
      对于git的增删改查记录,实际上是可以查看的,在团队开发中,对于每个人提交的东东就可以有据可依:

      同样whatchanged一样,只是说更详细一点:

      【注意】如果想退出查看log,需按下"q"键,直接按ctrl+z是无法退出日志查看状态的。
    • 共享及更新项目
      push:将本地仓库的代码提交给远程仓库:

      而目前本地仓库的文件结构如下: 

      这时我们将其提交到进程仓库中,利用push命令:

      这时到oschina.git中来查看远程仓库中是否已经有了cexo.txt文件:

      fetch,pull:从远程的分支获取最新的版本到本地
      关于这两者的区别,可以参考网上的这篇博文:http://blog.csdn.net/hudashi/article/details/7664457
      何时使用fetch?
      ③remote:查看远程仓库信息【关于这个,已经在上面中提到过】
      git remote:显示出远程版本别名:
      git remote -v 显示远程地址

      添加远程仓库
      git remote add pd git://github.com/cexo/ticgit.git

      git remote rename pd paul

      git remote rm paul

      git remote show origin

    Git的仓库管理员:

    • 分支管理及合并
      对于Git来说,分支是它的一个很重要的特点,所以需好好理解它
      ①branch:
      创建分支:git branch 分支名:

      查看当前的分支情况:

      注意一个细节,查看当前处理哪个分支上,可以通过它:

    • ②checkout:
      切换分支

      下面要做一个实现,来体会一下分支的作用,先切回主分支来查看一下目前文件:

      这时,切换到子分支,对cexo.txt进行修改,模拟在实际开发中的场景:

      于切换回主分支:

      另外还有一些可以查看分支的命令:
      git show-branch:

      git diff branch1 branch2

      ③merge(合并):
      当子分支开发完了并验证没问题了,则可以将其合并到master主分支上来了,所以合并分支有两种方式:
      第一种:git merge "merge branch1 to master" HEAD branch1
      意思是将branch1的代码合并到主分支上的最新代码,其中HEAD表示最新
      第二种:
      git checkout master
      git pull . branch1
      操练一下,将子分支cexo中修改的合到主分支上来:

      当然,实际merge时,肯定不会像现在这么顺利,肯定会有冲突的情况,下面来模拟一下怎么解决冲突:

      这时将其提交:

      同样,在子分支中进行修改同一个地方并提交:


      这时,再回到主分支进行合并:



      最后再提交:

      ④tag:
      当项目的第一个beta版本出来之后,可以对其加入一个tag,以便如果之后的开发有问题,可以快速回归到这个版本,所以tag的作用也就在此,下面来模拟一下:
      假如目前的版本是beta1,已经发布了,这时打上一个Beta1的tag:

      然后开始第二个版本的开发,版本为Beta2,这时又打上一个Tag:

      提交:

      这时,想查看Beta1的代码:

      但是如上图运行提醒所说:

      所以,如果想从tag中的代码上继续修改,则需要在一个新的分支上进行。
      最后,如果想删除tag,执行下面命令既可:

      好了,关于Git的学习,先到此为止,在实际工作中遇到代码管理的一些问题会继续跟进的!
  • 相关阅读:
    NOI2018:屠龙勇士
    Hello world!
    bzoj5月月赛订正
    codeforces906 D
    bzoj2728 [HNOI2012]与非
    bzoj3884上帝与集合的正确用法
    bzoj2817[ZJOI2012]波浪
    2017多校联合赛1[题解]
    论如何优雅的用bitset来求四维偏序
    bzoj1488[HNOI2009]图的同构
  • 原文地址:https://www.cnblogs.com/webor2006/p/3647074.html
Copyright © 2011-2022 走看看