十分钟掌握Git

作者: 4ea0af17fd67 | 来源:发表于2018-08-16 12:58 被阅读629次

    首先要理清概念

    Git:什么意思
    英文直译过来应该是:饭桶,烂人,废物 。由此可猜测当时git的作者可能是谦虚,自喻为“烂人”,认为自己是个自负的混混。当然也可能是因为作者原来用的BitKeeper不让用了,导致作者自己开发了git,他气不过,要骂人BitKeeper。

    也有人认为,git同音get,是“获得,得到” 的意思,帮助别人获得。
    当然也同音gay,同性恋???

    也可能是guy in there的缩写,and so on

    what ever,管他呢 知乎一群吃饱了的讨论过,你可以看看这里https://www.zhihu.com/question/54939657

    名字可以看出,码农多数是很Git(废物?扯淡?艹蛋,吃饱了撑的,无聊……)的,所以说兄弟你这样性格,找不到对象啊!

    but,我们码农写代码,想要一个什么样的工具:

    让我们来个女神幻想:

    1. 应该是不依赖互联网等,每个人独立开发,互不牵扯,合适的时间(我想什么时间什么时间)互相合并/同步一下对方的代码,合并时记录对方的操作(这样可以在对方做错的时候,骂他and嘲讽他(这样做,好像会使自己感觉牛逼or开心??? 谁知道呢))
    2. 应该方便我定义不同版本的代码,方便发布产品的1,2,3版
    3. 应该方便我定义不同的,处于变化的代码,方便开发,测试,发布等变态需求
    4. 最重要的,工具应该自动化,别让我经常干预,我嫌烦,工具一定要简单,我懒得学!!!
    5. 要标准化,全世界都一样才好。标注化会带来很多意想不到的好处!

    Git的作用定义:

    分布式文件版本控制系统

    1. 分布式:表示各个节点权力相同,也就是不需要服务器,每个人都能在自己电脑开发,开发者定时互相同步代码就行了。(好像满足幻想1了)
      2.支持标签,随时随地定义你想要的标签。(好像满足幻想2了)
      3.支持分支,分支就是不同的时时会变化的一坨代码。(好像满足幻想3了)
      4.git操作好复杂,还基于命令行的,我喜欢图形界面化的。(不满足,so,git不是女神)
      5.满足

    凑合用吧,要什么自行车,还要手表?

    基础知识

    1.git是 直接记录快照,而非差异

    我理解的快照就是文件在特定时间点的拷贝吧,1点的时候文件内容是123,2点的时候变成了1234,那么1点取个快照就是 (文件:1点+123)

    2.近乎所有操作都是本地执行

    git是分布式的,只有两台不同的计算机互相同步文件的时候,需要网络,其他操作都可以本机进行,只访问本地文件和资源。git本身分为 工作目录+暂存区+仓库,分布式代表了,git在每一台电脑上都是这样,一摸一样。也就是说,你平时的操作都是操作,工作目录+暂存区。源文件改变了,就提交到缓存。只有不同电脑互相同步代码时,另一台电脑的git充当了仓库(服务器)的角色。

    1. git保证完整性

    Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
    Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373
    Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

    4.git一般只添加数据

    为防止丢失数据,最好的方式就是不要提供删除功能。只添加就好了。所以用git,你的代码基本不会丢!

    1. 了解git定义源文件的三种状态

    1.已经提交 committed
    2.已经修改 modified
    3.已经暂存 staged
    已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

    三种状态

    基本的 Git 工作流程如下:

    1.在工作目录中修改文件。
    2.暂存文件,将文件的快照放入暂存区域。
    3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

    分支

    分支的本质是一个指针,指向提交对象的可变指针。https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B

    命令行

    这三个足够了,不懂的,不记得了就--help

    $ git help <verb>
    $ git <verb> --help
    $ man git-<verb>
    

    用不到命令行

    假如你用IDEA开发,全鼠标就行了



    工具栏从左向右依次是:update更新,commit提交,compare比较,history历史,evert撤销



    右键点击你的项目,可以看到git的所有设置和操作

    右下角有分支等处理



    菜单栏有其他任何你想要的版本控制设置

    但是,我啰嗦,常用git命令

    服务器,或者不同操作系统切换的时候,命令行是最方便的。也看的出作者当时是多么的鸡贼(机制and偷懒and不要脸)

    --初始化
    git init
    --添加文件,让git开始追踪文件的状态
    git add * 
    例如:
    git add *.c
    git add test.txt
    --提交
    git commit -m "备注信息" 
    --克隆一个库
    git clone https//xxxx 你的地址 修改名称
    例子:克隆并重命名 git clone https://github.com/libgit2/libgit2 mylibgit
    --检测文件现在的状态
    git status
    -- 忽略文件
    编辑.gitignore文件,把你想忽略的文件/目录 写到里边,支持正则
    --查看不同
    git diff
    --移除文件
    git rm 文件
    源文件保存,只是移除git控制了
    例子:
    git rm a.txt
    git rm \*
    --查看提交历史
    git log
    --查看远程仓库版本
    git remote -v
    --从远程仓库拉取或抓取
    git fetch 仓库名
    --推送到仓库
    git push 仓库名 分支
    --列出标签
    git tag
    --不想写了,反正你也记不住,这东西就得用,不用背过也忘了
    

    最后,提升

    如果你看完这个文章,发现我说的,你本来就都会,没有收获,恭喜你,又浪费时间了(都会你看什么,是不是吃饱了?)
    这时候,你还想深入了解Git应该:
    1.看官网文档,最详细,最权威,没有之一 。https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E5%9F%BA%E7%A1%80
    2.看源码。https://github.com/git/git
    3.抱怨:源码有5万多次提交了。。。shit哦

    拜拜!

    相关文章

      网友评论

        本文标题:十分钟掌握Git

        本文链接:https://www.haomeiwen.com/subject/zgunbftx.html