1. 集中式(SVN):
    集中式版本控制系统,版本库是集中存放在中央服务器的,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
  2. 集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,则非常的慢。
  3. CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用。由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。
  1. 分布式(GIT)
  2. 分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,工作的时候,就不需要联网,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
  3. 和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
  4. 在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
  1.  

 

  1. 安装请参考: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000
  1. 命令介绍:
  2.  
  3. . git clone git@192.168.5.86:/srv/sample.git //从远程库获取全部分支
  4. . git add readme.txt //增加一个文件到暂缓区
  5. readme.txt改成.(点) //增加此目录下(包括子目录里的)所有已修改和未增加过的文件
  6. . git commit //把文件提交到仓库
  7. -m “此次提交说明” //提交说明,执行此语句必须先执行git add
  8. 如果说明需要换行可以使用单引号
  9. -am “此次说明” //git add 和git commit的合并方式(只针对修改文件自动git add)
  10. 当文件修改以后执行此命令需要先执行git add
  11. 工作区 暂缓区概念
  12.  
  13. . git commit --amend //取消上次提交并重新提交
  14. . git status //查看状态
  15.  
  16. . git diff readme.txt //是查看工作区与暂缓区的readme.txtde的差别。不写文件则比较所有
  17. git diff test //显示当前目录和另一个叫'test'分支的差别
  18. git diff HEAD //是查看工作区和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)
  19. git diff HEAD -- readme.txt //查看当前目录下的readme.txt和上次提交的差别
  20. git diff SHA1 SHA2 //比较两个版本直接的区别
  21. git diff --cached //是查看暂缓区与commit的差别的。
  22. . git log //显示提交的日志
  23. --pretty=oneline //显示简略信息
  24. --graph //显示分支合并详情
  25. --abbrev-commit //使用简短的commit且唯一的值显示
  26. 详细信息
  27.  
  28. --pretty=oneline则显示简略信息
  29.  
  30. 这个就是commit_id,与svn有区别.svn为纯数字.但gitsha1后字符串.目的是防止成员间冲突
  31.  
  32. . git reset //回退操作
  33. --hard HEAD^ 回退到上一个版本.HEAD为最新版本.HEAD^为上一个.HEAD^^为上上个.当然如果回退版本较多可以写为HEAD~
  34. 当然也可以直接写commit_id,不用写全.git会自动检索
  35. 比如 --hard b3e4ba
  36. --hard 作用:从版本库同时覆盖暂缓区,工作区.如不加则只覆盖到暂缓区,需要使用checkout从暂缓区覆盖到工作区
  37. . git revert //撤销某次操作,此次操作前后的commit都会被保留
  38. . git reflog //显示所有执行的命令
  39.  
  40. 这个命令主要用来当你进行reset操作以后回不去了..就可以查看commit_id然后进行回溯
  41. . git checkout -- file //使用暂缓区覆盖工作区的修改,暂缓区为空则使用版本库中的数据进行覆盖
  42. --很重要,没有--,就变成了“选择一个新分支”的命令
  43. 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
  44. 一种是readme.txt自修改后还没有被放到暂缓区,现在,撤销修改就回到和版本库一模一样的状态;
  45. 一种是readme.txt已经添加到暂缓区后,又作了修改,现在,撤销修改就回到添加到暂缓区后的状态。
  46. 简单地说 git reset 作用是 版本库覆盖到暂缓区
  47. git checkout暂缓区到工作区,如果暂缓区为空.则直接从版本库读取并覆盖工作区
  48. . git checkout -b dev //切换到dev分支,
  49. 此命令等同于执行git branch dev git checkout dev
  50. -b //创建并切换分支
  51. . git rm test.php //删除文件.当然删除后要执行下 git commit ,不需要git add
  52. -r 删除一个文件夹
  53. --cached 从暂缓区删除
  54. . git branch [-d] [分支名称] //查看所有分支
  55. //已选择分支会使用*号标出
  56. -d //删除分支,删除前先checkout到其他分支.否则无法删除
  57. -D //强制删除分支.-d如果没有合并则不能删除.可以使用-D来进行强制删除
  58. . git merge dev //合并指定dev分支到当前分支上.合并前一般先checkout一下确定给没有冲突
  59. -m "merge" //合并时的提示信息
  60. *********************************************************************************************
  61. 看到下面这个情况要注意有冲突啦.别忘了解决冲突
  62.  
  63. *********************************************************************************************
  64. master应该是可以直接发布的.所以当合并到master的时候应该是没有任何冲突的
  65. 因此不建议多人同时对master进行合并.
  66. 可以创建一个dev(developer)分支.用来对成员的代码提交冲突等错误进行排错合并.
  67. 当所有问题都确保被解决后才由最终有权限的管理员的进行合并到master
  68. *********************************************************************************************
  69. . git stash //把当前工作现场“储藏”起来
  70. . git stash list //列出所有”储藏”起来的工作现场
  71. . git stash apply stash@{} //恢复工作现场,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
  72. . git stash pop //恢复工作现场,并把stash删除
  73. stash应用场景:当手上工作并没有完成.但是有一个bug需要紧急修复.可以吧工作现场储藏起来.创建一个bug分支.等bug修复,删除bug分支.然后pop恢复现场继续工作.主要作用就是可以不用新建一个文件夹.可以任然在原来的文件夹中进行一系列操作
  74. . git remote //查看远程仓库
  75. -v //查看详细信息
  76.  
  77. 显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址
  78. . git push origin master //推送本地库master分支到远程库
  79. 适当的权限(git不支持权限.但是可以通过hook来使用其他软件来支持权限功能)
  80. master //管理员从dev checkout到本地确认没有任何问题后merge到master.最好只有一个人操作以防冲突
  81. dev //所有成员提交的代码(类似现在得svn),需要经常进行同步
  82. Bug- //本地进行bug解决.解决完毕才需要推送.当然只有在你dev写到一半的时候才需要推送bug-01否则一般是与dev合并后推送dev
  83. 是否推送分支.其实主要根据需求和团队约定
  84. . git checkout -b dev origin/dev //创建一个dev分支从远程库的dev分支中. (要先clone完整的版本库)
  85. . git pull //抓取与当前分支同名的远程分支的最新内容.如冲突则合并.当两个人同时修改了文件.可以在本地修改合并解决冲突后提交.
  86. . git pull <远程主机名> <远程分支名>:<本地分支名> //抓取某一个固定分支的
  87. . git push origin(远程地址) branch-name(本地分支名称) //push一个本地分支到远程库
  88. . git push <远程主机名> <本地分支名>:<远程分支名>
  89. . git push origin (此处是空格):dev //删除远程的某一个分支
  90. . git tag [-a] [-s] [-d] [v1.] [commit_id] [-m “说明文字”] [fec145a] //查看所有标签(并不是按创建顺序打出.而是按字母排序)
  91. -s //用私钥fec145a对tag进行签名,签名采用PGP签名需要安装GnuPG
  92. -m //说明
  93. -a //指定一个commit_id打标签.通常和-m一起用.对某个标签加上说明文字
  94. v1. //增加一个新标签
  95. -d //删除指定标签
  96. 创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
  97. . git show v0. //查看某个便签的详细内容(签名.说明文字)
  98. . git push origin v1. //推送具体标签到远程库
  99. . git push origin --tags //推送全部标签到远程库
  100. . git push origin :refs/tags/v0. //删除远程标签.(首先要先删除本地.等同于本地与远程进行一个同步操作)
  1. 正常开发的流程:
  2. 步骤 Git 操作
  3. 克隆代码 git clone git@192.168.56.101:/srv/sample
  4. 从远程master创建dev分支进进入 git checkout b dev origin/master
  5. 在分支中开发
  6. review代码
  7. 第一轮功能测试
  8. 添加代码到分支的暂存区 git add somefile
  9. 提交代码到分支 git commit -m "本次提交的注释"
  10. 切换到主版本 git checkout master
  11. 获取远程master分支的最新代码 git pull origin master:master
  12. 合并dev分支到master分支 git merge dev
  13. 解决合并时产生的冲突 请参考分支合并时冲突的解决
  14. 第二轮合并后的测试
  15. 获取远程最新代码 git pull origin master:master
  16. 推送本地master分支到远程dev分支 git push origin master:dev
  17. 管理员获取dev版本并测试
  18. 管理员合并远程dev分支到远程master分支
  1. git status的状态说明
  2. 一般仓库中的文件可能存在于这三种状态:
  3. Untracked files 文件未被跟踪;
  4. Changes to be committed 文件已暂存,这是下次提交的内容;
  5. ) Changes bu not updated 文件被修改,但并没有添加到暂存区。如果 commit 时没有带 -a 选项,这个状态下的文件不会被提交。
  6.  
  7. 从远程库originmaster分支上clone并创建了一个dev分支.此时有三个commit被提交到本地库.需要git push推送到远程库
  8.  
  9. Test.txt文件被修改.需要使用git add添加到暂缓区.或者使用checkout –从本地库覆盖掉工作区的修改
  10. 不能commit因为需要先add
  1. 忽略规则
  2. . 在工作区创建文件.gitignore *windows无法创建.会提示请输入文件名.使用编辑器另存为即可
  3. . 比如要忽略database.php,只要在.gitignore中加入database.php即可
  4. Git有大多数语言的忽略列表,用于忽略编译产生的中间件可从https://github.com/github/gitignore查看并添加到.gitignore中

 

注: 该图来自于:http://www.cnblogs.com/1-2-3/archive/2010/07/18/git-commands.html

GIT入门文档的更多相关文章

  1. GIT 使用文档

    GIT 使用文档 git clone http://wanghaiyang:Z123456w@192.168.1.118/wanghaiyang/hdtas.git git add . //添加当前文 ...

  2. Apache BeanUtils 1.9.2 官方入门文档

    为什么需要Apache BeanUtils? Apache BeanUtils 是 Apache开源软件组织下面的一个项目,被广泛使用于Spring.Struts.Hibernate等框架,有数千个j ...

  3. vuex最简单、最直白、最全的入门文档

    前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...

  4. GIt帮助文档之忽略某些文件——忽略python虚拟环境文件夹(转)

    前言:为避免多个Python项目下安装库之间的冲突,或为轻松打包某个项目,建议在每个项目文件夹下安装Python虚拟环境,并在虚拟环境内进行操作,之后你安装的任何库和执行的任何程序都是在这个环境下运行 ...

  5. Entity Framework Core 中文入门文档

    点击链接查看文档: Entity Framework Core 中文入门文档

  6. django 中文入门文档

    django中文入门文档:阅读地址

  7. 【简明翻译】Hibernate 5.4 Getting Started Guide 官方入门文档

    前言 最近的精力主要集中在Hibernate上,在意识到Hibernate 5 的中文资料并不多的时候,我不得不把目光转向Hibernate的官方doc,学习之余简要翻一下入门文档. 原文地址:htt ...

  8. Duilib入门文档提供下载

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] Duilib入门文档 基本框架 编写界面xml 响应事件 贴图描述 类html文本描述 动态换肤 Dll插件 资源打包 Duil ...

  9. TypeScript入门文档

    typescript入门文档链接d地址:https://ts.xcatliu.com/basics/type-of-function.html 博主个人站点:www.devloper.top

随机推荐

  1. mysql使用navicat和mysqldump导出数据

    1.navicat 方式一:选中表,右键转储:(含有表结构和数据) 方式二:选择右上角工具,点击数据传输,在这个页面右侧选择数据库,左侧选择文件. 点击下一步,选择导出的表名和各种函数什么的,然后点击 ...

  2. ACM-ICPC 2018 南京赛区网络预赛 J Sum (思维+打表)

    https://nanti.jisuanke.com/t/30999 题意 f(i)表示i能拆分成两个数的乘积,且要求这两个数中各自都没有出现超过1次的质因子的方案数.每次给出n,求∑(n,i=1)f ...

  3. python--爬取豆瓣热门国产电视剧保存为文件

    # -*- coding: utf-8 -*- __author__ = 'Frank Li' import requests import json class HotSpider(object): ...

  4. Spring boot中使用Mongodb

    安装 使用Idea新建Spring boot工程时需要选择Mongodb 或者在工程中加入依赖 Maven: <dependency> <groupId>org.springf ...

  5. Java面试题系列(四)强引用、软引用、弱引用、幻象引用有什么区别?

    序言 资料 https://blog.csdn.net/weixin_38729727/article/details/82259507

  6. opencv实现坐标旋转(教你框住小姐姐)

    一.项目背景 最近在做一个人脸检测项目,需要接入百度AI的系统进行识别和检测.主要流程就是往指定的URL上post图片上去,之后接收检测结果就好了. 百度的检测结果包含这样的信息: left - 人脸 ...

  7. 六、文件IO——fcntl 函数 和 ioctl 函数

    6.1 fcntl 函数 6.1.1 函数介绍 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd ...

  8. [译]使用NuGet管理共享代码

    原文 可以在内网部署自己的私人NuGet仓储服务. Setting it up 本例中我们创建一个发邮件的类,将其作为我们自己的NuGet包: using System; using System.N ...

  9. (9)EvenOddJump

    一.问题描述 一只青蛙从数组(A)的每一个元素向数组尾部跳动.跳动规则如下: 当奇数跳的时候,就是第1.3.5.7....次进行移动时候,移动规则A[i] <= A[j],  并且A[j] = ...

  10. 第21月第7日 数据结构 b+树

    1.B+树 MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等. http://blog.codingla ...