Git pro 笔记

git的特点概述

  1. 直接记录快照,而非差异比较
    Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。。这类系统(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容.Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

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

  3. 时刻保持数据完整性
    在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。这项特性作为 Git 的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。
    Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成,看起来就像是:

    24b9da6552252987aa493b52f8696cd6d3b00373
    

    Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。

  4. 在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。

git命令

  • git init
  • git config(这里有很多扩展)
    初次运行 Git 前的配置
    一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。
    Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。这些变量可以存放在以下三个不同的地方:
    /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。
    ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。
    当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。
    每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
    Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
    用户信息
    第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

    $ git config --global user.name "John Doe"
               $ git config --global user.email johndoe@example.com

    如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

  • 文本编辑器

    接下来要设置的是默认使用的文本编辑器。Git 需要你输入一些额外消息的时候,会自动调用一个外部文本编辑器给你用。默认会使用操作系统指定的默认编辑器,一般可能会是 Vi 或者 Vim。可以重新设置:

    $ git config --global core.editor emacs
    
  • 差异分析工具

    还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

        $ git config --global merge.tool vimdiff
    

    Git 可以理解
    vimdiff,gvimdiff,ecmerge,kdiff3,tkdiff,meld,xxdiff,emerge,
    和 opendiff 等合并工具的输出信息。当然,你也可以指定使用自己开发的工具,具体怎么做可以参阅第七章。
    查看配置信息

  • git config –list

    要检查已有的配置信息,可以使用 git config –list 命令:

    $ git config --list
        user.name=Scott Chacon
        user.email=schacon@gmail.com
        color.status=auto
        color.branch=auto
        color.interactive=auto
        color.diff=auto
            ...
    

    有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

    也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

    $ git config user.name
        Scott Chacon
    
  • git add(git add .暂存所有修改过的文件)

  • git reset HEAD … 的方式取消暂存
  • git commit(本质上生成一个版本)

    (-m : 后接提交附属的说明)
    (-a : 可以跳过 git add,直接提交所有已经跟踪的并修改过的文件)
    (-amend : 修改最后一次提交:此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 –amend 提交:

        $ git commit -m 'initial commit'
            $ git add forgotten_file
            $ git commit --amend
        上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。)
  • git checkout – …:取消对指定文件的额修改

  • git clone(支持git:// 、 http:// 、 ssh user@server:/path.git)
  • git status

  • git diff(–staged)

  • git rm (-f,–cached)
  • git mv
  • git log

  • .gitignore 文件 : 存入不需要加入git 的文件

    文件 .gitignore 的格式规范如下:

    • 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
    • 可以使用标准的 glob 模式匹配。glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
    • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
    • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

远程库相关的命令

  • git remote(-v)

    它会列出每个远程库的简短名字
    列出的地址只有是 SSH URL 链接的仓库我能推送数据上去

  • git remote add [shortname] [url]:添加远程仓库简称

        $ git remote
            origin
            $ git remote add pb git://github.com/paulboone/ticgit.git
            $ git remote -v
            origin git://github.com/schacon/ticgit.git
            pb git://github.com/paulboone/ticgit.git
            # 现在可以用字符串 pb 指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb
    
  • git remote show [url]

  • git fetch [remote-name]

    此命令会到远程仓库中拉取所有你本地仓库中还没有的数据,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。

  • git push [remote-name] [local branch-name(:remote branch-name)]。

    如果要把本地的 master 分支推送到 origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令:

    $ git push origin master
    

    只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。
    另外,如果local branch-name为空,只保留“:remote branch-name”,那么就是会删除remote branch-name指定的远端分支

  • git remote rename 命令修改某个远程仓库在本地的简称

    碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm 命令:

        $ git remote rm paul
            $ git remote
            origin
    
    • git tag :显示所有的标签
    • git tag show:显示指定的标签
    • git tag -a (标签名) -m (标签说明):打标签

      $ git tag -a v1.4 -m ‘my version 1.4’

分支

  • git branch 分支名称:创建分支

    • (-d 选项删除分支)
    • (不加分支名称和任何参数:显示所有分支)
    • git checkout 分支名称:切换分支

      运行行 git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,要用 git checkout 切换
      要新建并切换到该分支,运行 git checkout 并加上 -b 参数:

          $ git checkout -b iss53
              Switched to a new branch "iss53"
      
  • git checkout -b [分支名] [远程名]/[分支名] 或者

  • git checkout –track [远程名]/[分支名]

    在clone或者fetch之后用,可以在本地创建同远端同名且内容相同的分支。从远程分支 checkout 出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支。在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。

  • git merge branchName: 合并分支:将branchName合并到当前的分支上去

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pro Python 第2版,2014.12.17出版的新书 You’ve learned the basics of Python, but how do you take your skills to the next stage? Even if you know enough to be productive, there are a number of features that can take you to the next level in Python. Pro Python, Second Edition explores concepts and features normally left to experimentation, allowing you to be even more productive and creative. In addition to pure code concerns, Pro Python develops your programming techniques and approaches, which will help make you a better Python programmer. This book will improve not only your code but also your understanding and interaction with the many established Python communities. This book takes your Python knowledge and coding skills to the next level. It shows you how to write clean, innovative code that will be respected by your peers. With this book, make your code do more with introspection and meta-programming. And learn and later use the nuts and bolts of an application, tier-by-tier as a complex case study along the way. This book is for intermediate to advanced Python programmers who are looking to understand how and why Python works the way it does and how they can take their code to the next level. Table of Contents 1. Principles and Philosophy 2. Advanced Basics 3. Functions 4. Classes 5. Common Protocols 6. Object Management 7. Strings 8. Documentation 9. Testing 10. Distribution 11. Sheets: A CSV Framework 12. Style Guide for Python 13. Voting Guidelines 14. The Zen of Python 15. Docstring Conventions 16. Backward Compatibility Policy 17. Python 3000 18. Python Language Moratorium
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值