设为首页 收藏本站
查看: 676|回复: 0

[经验分享] 【Git】Git学习手册

[复制链接]

尚未签到

发表于 2018-1-14 16:39:17 | 显示全部楼层 |阅读模式
  一直忙于各种琐碎的项目开题报告,编码做PPT等琐碎的工作,博客都好久没更新,罪过罪过!
  个人用github有一段时间了,当时学习的时候参照官方的教程,勉强能用,但是有些原理性的东西总是没搞懂,所以很困惑,而网上关于git和github学习的中文文档和学习资料都不是很多,所以打算写一些自己使用github和git的一些心得,让初学者少走弯路。
  ----------------------------------------------
基本概念:
  版本库(Repository)是版本控制系统用来存放所有历史数据的地方,主要存放各个文件的当前状态,历史修改时间,谁做的修改,以及修改的原因。举个简单的例子,就好比银行的保险箱,每次往里存钱,都会记录谁,什么时间,存放多少钱,存入的原因等。对应的版本库(Repository)主要存放代码(文档,数据,图标等),并且每一次更新都要记录谁,什么时间,提交了什么更新,以及更新的原因是什么。
  git就是管理我们这个版本库的管家,相当于银行保险箱的管理人员。以前的版本控制入CVS,SVN等都是集中控制管理的,也就是有一个中央服务器,大家都把代码提交到中心节点(入下图),而git是分布式的版本控制工具,也就是说没有中央服务器,每个节点的地位平等,有点P2P的味道,众生平等,谁也别瞧不起谁 ! ^_^

  -------------------------------------------------
Git的安装与配置
  ubuntu环境:
  sudo apt-get build-dep git-core git-doc
  make prefix=/usr/local all doc
  sudo make install install-doc
  检查安装是否成功:git --version
  Windows环境:
  github网站上又git的原生态安装应用,可以直接“下一步下一步”安装。下载链接:http://windows.github.com/
  安装完成后,桌面上会有Github和Github Shell的快捷方式出现。
  配置
  首先请注册github网站,记住用户名和密码;
  然后Ubuntu下请打开Terminal,Windows下请双击Git Shell;
  配置用户名和密码:
  git config --global user.name "Your name"
  git config --global user.email  "Your Email used to register"
  检查配置是否成功:git config --global --list  查看设置的用户名和Email。
  如果上面和下面要讲的任何命令有疑问,使用命令git help <command>查看command的用法。
  ---------------------------------------------
添加与提交:Git基础
  好了配置好了,现在让我用git来管理我们的代码吧,日常是如何使用git呢,主要包括添加于提交,理解和使用分支,查询git历史记录,与远程版本库写作,管理本地版本库等,在进入具体的内容之前,强烈建议花几分钟时间阅读图解git这篇文章,用图像的方式解释了git的工作原理,非常容易记住,再次强烈建议。
  创建版本库:  mkdir test_git        //新建目录test_git
  cd test_git            //进入目录
  git init                  //初始化git,现在git会管理这个目录中的所有内容了
  增加文件:  touch helloworld.txt   //创建文件,在windows下直接到目录新建文件即可
  git add helloworld.txt    //告诉git我要添加一个文件,但是git并没有把你所添加的文件放入版本库中,而是对内容进行hash后生成了一个编号
  //相当于添加内容的身份证号,将该身份证号添加到版本库index,即告诉git我有一个文件编号XXX的内容将要提交,
  //但是并没有真正提交到版本库(如下图),要想将文件真正放入版本库需要commit
  git commit -m "add helloworld.txt"         //-m参数是提交留言,说明为什么要提交的更新做了什么事情,方便别人查看。
  对下图的说明:working directory是当前的工作目录,而stage是暂存区也称索引区存放工作目录中那些你打算提交到版本库的变更,git add只是将文件的索引提交的版本库,而真正的内容并没有进入版本库,History就是版本库,需要注意的是这是本地的版本库,存在于本地的电脑中,相当于你电脑上一个你的私人钱财管理员。

  两个常用操作经常一块使用
  git add some-file
  git commit -m "some changes to some-file"
  查看当前代码状态:git status
  会显示
  changes to be commited       表示将要提交但是尚未提交的修改(已经add但是尚未commit),也就是在stage区域已经有了,但是还没有commit的内容
  changed but not updated       表示已经修改但是还没有添加到暂存区的内容(尚未add,当然尚未commit)
  查看文件改动 git diff
  git diff                 比较working directory和stage的差别
  git diff --cached   比较stage和history的差别
  git diff HEAD        直接比较working directory 和history的区别
  文件重命名: git mv
  git mv helloworld.txt helloworld2.txt    //将helloworld.txt重命名为helloworld2.txt
  ------------------------------------------------------
理解和使用分支
  git可以使用多条分支,这样就可以再不影响当前进度的情况下,用创建新的分支的方法来进行接下里的开发,何时使用分支是一门艺术,一般来说:
  1. 试验性修改(常用):测试新的算法或者为某个特别的模式重构部分代码
  2. 增加新功能(常用):为每个新功能的开发创建新的分支,完成该功能开发后,在将其合并到主分支上
  3. Bug修改:修复代码中的bug,可以创建新分支来对该bug进行修改,然后将修改合并到主分支上
  创建新分支:git branch test              //创建名为test的分支
  切换分支:git checkout test             //切换到test分支工作, 与上面的命令经常一起使用
  查看分支:git branch                      //查看前版本库(本地)的所有分支
  合并分支:git checkout master        //切换到“要合并到”的分支,常见的就是test分支合并到master分支,所以先切换到master分支
  git merge test                //合并test分支到master分支
  注意: 在合并分支的时候有时候会出现冲突(conflict)的情况,创建的情况是master分支和test分支对同一文件的同一处代码的内容不一样(例如:master分支在hello.cpp中第三行写入的是"hello", 而test分支在hello.cpp的第三行中写入的是“world”),这样使得git不知道如何是好,这时候就需要你手工修改代码了,我难道要记住master和test在同一位置的内容?当然不用了,git会在git merge的反馈信息中说明,代码在何部分存在冲突。
  删除分支: git branch -d test          //删除test分支
  分支重命名:git branch -m test test2      //将test分支重命名为test2,这个命令不常用
  --------------------------------------------------------------------------------------
查询git历史记录
  查询所有的commit历史:git log
  查询指定范围的commit历史: git log --since = "5 hours"                //查看最近5小时的commit历史记录
  git log --before = "5 hours" -2          //查看5小时之前最后2次的提交commit记录
  git log 18f822e..0bb3dfb                  //查看从18f822e(不包括18f822e)到0bb3dfb之间的提交记录
  git log 18f822e..HEAD                     //HEAD表示当前所在分支的最新版本,即HEAD指向当前所在分支的最后一次commit
  git log HEAD^^^                            //^表示父节点,HEAD^就表示HEAD的父节点,以此类推
  git log HEAD~3                               //~N 表示回溯N个节点,所以与上一个表述等价
  查看版本之间的差异:           git diff                                           //查看working dir和stage(index)之间差异
  git diff  --cached                            //查看stage(index)和History(当前分支版本库)之间的差异
  git diff  HEAD                                //查看working dir 和 History之间的差异
  问责文件内容:                     git blame hello.cpp                        //查看所用向hello.cpp提交内容的人,方便问责到人,谁,什么时候,提交代号,提交内容,留言等都会显示
  增补提交:                           git commic  -C HEAD -a --amend   //用head上次提交的留言(-C表示comments),将这次的提交追加到上一次提交上,不会创建新的提交代号
  -----------------------------------------------------------------------------------
与远程版本库协作
  github就是提交远程版本库服务的网站,所以我们这里的远程版本库为方便起见用github代替,上面我们得操作都是和本地的git交互,相当于是和本地的git小助手交互,如何将这些在本地的代码和github上的版本库连接起来:将本地的代码推送到github上,将github上的代码检出(checkout)到本地?
  git支持三种协议:SSH协议格式: usrname@github.com/registername/helloworld.git      //常用于将本地版本库推送到github上的版本库
  git协议格式:   git://github.com/registername/helloworld.git             //常用于从github版本库拖入本地版本库
  HTTP/HTTPS协议格式: http://github.com/registername/helloworld.git
  克隆github上的Spoon-Knife版本库到本地:   git clone git://github.com/octocat/Spoon-Knife.git
  版本库同步:                                            git fetch              //取来(fetch)远程版本库到本地,但是并不与本地分支合并
  git pull                //拖入(pull)远程版本库,与本地分支合并,相当于 git fetch + git merge
  推送本地代码到远程版本库:                        git remote add origin https://github.com/registername/reponame.git   //为远程版本库reponame取别名origin
  git push origin master                                  // 将本地master分支推入github上的origin
  --------------------------------------------------------------
其他:
  还有一些不是很常用的操作简单的列在下面,如果用到这些命令,可以参看git doc或者本文参考文献中所列的内容,不一一赘述。
  翻转提交:       git revert
  复位:            git reset
  分支变基:      git rebase
  标签:            git tag
  git子模块:     git submodule
  导出版本库:   git archive
  二分查找:      git bisect
  -------------------------------------------------------------------------------------------
参考文献:
[1]Travis Swicegood(董越,付昭伟译).  版本控制之道——使用git. 电子工业出版社. 2010.

[2]图解git: http://marklodato.github.io/visual-git-guide/index-zh-cn.html

[3]github官方tutorial:https://help.github.com/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435054-1-1.html 上篇帖子: Git 查看文件的历史 下篇帖子: 【经验之谈】Git使用之Windows环境下配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表