zoukankan      html  css  js  c++  java
  • GIT入门文档

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

     

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

     

     

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

  • 相关阅读:
    mongo 语法总结
    关系型数据库和非关系型数据库
    navicat for mongodb激活 工具和 激活流程
    理财的重要性
    【日常记录】【unity3d】 OnTriggerEnter 和 OnCollisionEnter (2D) 的区别
    【日常记录】【unity3d】 2D跳跃过快导致角色某帧陷入地面
    【日常记录】【unity3d】 获取手柄轴的输入
    【Java】java 中的泛型通配符——从“偷偷地”地改变集合元素说起
    【日常记录】用 vs2015 编译 love2d 引擎时出现 依赖项目luajit编译失败的解决办法
    【翻译&转载】shader的导数函数介绍
  • 原文地址:https://www.cnblogs.com/logo-fox/p/5593596.html
Copyright © 2011-2022 走看看