zoukankan      html  css  js  c++  java
  • 再谈git和github-深入理解-2

    github中的 sloc是什么意思?
    sloc: source lines of code: 代码行数, 源代码行.

    要向仓库中 create file/upload file/edit file等操作, 你需要在某个分支上才行: you must be on a certain branch.
    在github上 创建/修改/删除 一个文件都是一个 commit

    一个节点的 父节点(parent version 父版本) 是指比他 更早的 那个提交 节点. 所以 git节点的表示方法是: a <- b <-c (current HEAD)
    一次提交/commit等 就是 一个新的节点, 一个新的版本.

    git/github的 commitID为什么是7个数字

    • (工作树/版本库 的版本号是 5 ~ 7 个数字, 是 commitID的前面几个数字, 完整的commitID是40个字符).
    • commitID是一个sha1的160bit, 40个16进制数字, 在 .git/objects中, 根据commitID 进行了目录划分: 一个 commitID的 前两位数字 就是目录名, 剩余的38位数字 组成该目录下的一个文件.

    command-line 命令行(是 一个完整的 "单词")

    git rm 怎样用?

    • git rm : to remove files from the working tree and from the index
    • git rm 的用法: git rm [options] [--] ...
    • git rm的选项: -f = --force, -q = --quiet, -r 递归删除
    • git rm --cached: 只是 从删除 暂存区删除, 而工作树 中的对应文件并不变, 因此, git rm 总是要从index 区删除的, 要用 git rm删除的文件 必须是已经 被 git add 添加到 staged 区域了的. 否则就会报错...
    • git命令中的 "通用"选项 [--] 两个横线, 它是一种 "分隔符" 用来分隔 前面的命令行选项options 和 后面的文件列表(因为linux下文件名称可以是 类似 --cached 这样的), 以免文件名被误认为 是 选项 : it can be used to separate the command-line options from the list of files. (useful when files might be mistaken for command-line options)
    • be mistaken for: 被误解(成....)

    git 中的工作树和 工作区?

    两者其实是一样的: 都是用户编辑/工作的目录, 叫工作树 working tree可以, 叫 工作区 working space 也可以
    同样的, 本地仓库 也叫: 版本库, 数据库 都是它

    git的index/stage 暂存区是git高效 的关键所在, 是git设计的关键点.

    git rm 删除 '--cached' 文件?

    • 如果要删除 以 横线- 或 双横线开头 的文件, 不能直接 rm -file/ --filename 因为会把这些当做是 命令的选项, 应该要指明 其路径,比如: rm ./-file 或 rm ./--filename
    • git rm 'file' 不能删除文件, 但是 直接用 rm就能删除? 报错: fatal pathspec 'fielname...' did not match any files? 是因为, git rm (或 git rm --cached) 总是要从 stage区删除文件, 如果文件没有被 git add, 处于 untracked 状态, git没有对该文件进行管理/索引/跟踪的话, git就会 "视而不见" 说找不到这个文件了, 因此, 如果确实要用 git rm来删除的话, 就一定要先 git add...

    在shell中, $str是表示变量 的引用, 如果要对字符串进行 处理/运算, 要使用 花括号, 比如: ${...}
    有哪些运算符:

    • 只有当 # 在字符串前面 , 表示求长度 ${#str}
    • 其余的都是 运算符都在字符串后面 , 比如 ${str#*/}
    • 字符串截取方法

    有3种截取符号, 用# 截取; 用 % 截取; 用冒号截取
    ${str#/} ${str##/}: # 表示从左边截取, 保留右边; 通配符 * 在 截止字符的左边,  实际上, 常常有这样的需求: 要截取取的范围是: 第一个和最后一个截止符: 两个##表示匹配最后一个 截止符;
    ${str% /} ${str%% /} % 表示从右边截取, 保留左边; 所以通配符 * 在截止符的右边; 两个%% ...
    ${str:0:7} ${str:0} ${str:0-4:3} ${str:0-4} 表示从 ? 位置开始, 截取多少个字符.

    如何指定css文件的字符编码?

    • 当css文件中, 出现"非ascii"字符时,比如: font-family: venda, '宋体',...时, 才需要指定编码
    • 指定方法是: 在css文件的开头写上"标记" : @charset 'utf8'
    • 如果没有指明 @charset , css文件将使用对应的html中的字符编码.
    • html4中的 link标签有 charset这个属性, 但是h5中则废弃.

    git status -s?
    -s = --short 是指 用剪短/简洁方式 列出 staged/but uncommitted的文件和 untracked文件. 其中的A是 是已经 added的 , ?问号是没有 被tracked的文件
    每次提交前, 用 status命令查看, 是一个 好习惯!

    • 已经 committed的文件用 log命令查看.
    • 如果文件已经被add到 index区了, 即 have been staged. 要从暂存区删除, 即unstaged, 使用 : git rm --cached -- ...

    ### 关于git 中的 checkout 命令: 这是一个 非常 "危险的命令", 是对("未提交到 暂存区的") 工作区/或 暂存区中的 文件的 修改/编辑/ 你前面所做的 工作的 放弃/cancle/discard! 差不多相当于 对文件的 rm命令. 所以要 小心使用! 同时也可以看出, 在使用 git 的过程中, 要及时 使用 git add命令! 这样 才能把 你的所做的修改等工作 提交到 暂存区( 更新暂存区的虚拟目录树, 同时修改内容 也被 存储到 objects 对象库中). (相当于 在 word中 编辑文档的时候 要时常记得 ctrl+s保持) 参考: `http://www.worldhello.net/2010/11/30/2166.html` 感觉这个里面讲得很好, 很通俗易懂! 特别是那个图很明了!

    git为什么设计 index暂存区? stage的作用? 是为了便于 跟踪工作区的文件, 通过检测 工作树中文件的 时间戳/文件size等来判断文件是否发生了 changes, 从而提示用户提交和保持更改.

    当执行 "git status" 命令扫描工作区改动的时候,先依据 .git/index 文件中记录的(工作区跟踪文件的)时间戳、长度等信息判断工作区文件是否改变。如果工作区的文件时间戳改变,说明文件的内容 可能 被改变了,需要要打开文件,读取文件内容,和更改前的原始文件相比较,判断文件内容是否被更改。如果文件内容没有改变,则将该文件新的时间戳记录到 .git/index 文件中。因为判断文件是否更改,使用时间戳、文件长度等信息 (文件的元信息) 进行比较要比通过文件内容比较要快的多,所以 Git 这样的实现方式可以让工作区状态扫描更快速的执行,这也是 Git 高效的因素之一。

    文件 .git/index 实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的 内容并不存储其中,而是 " 文件的真实内容 和 修改" 保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。

    github上 添加文件 New file, 通过分支来添加??? 测试pull?


    content可以用作复数, 也可以用作单数

    • 复数时,表示 "包含的内容物"
    • 单数时, 表示 抽象的含义, "要旨, 含义"等
      通常用作复数的形式要多一些

    ls / ll 默认的情况下, 是显示 目录中的内容.
    有时候, 我们只是想查看目录本身, 那么 同样的命令, 要使用 -d 或 --directory 选项.
    比如: ll -d [DV]* /home

    关于shell中的字符颜色表示方法?

    • 在shell中, 中括号是有特殊含义的, 表示的是 多个字符中的其中之一, 如果要表示 中括号的本义, 就要 用转义: [ ]
    • shell表示字符颜色, 转义符可以用 e 或 33 来表示, 要注意 33一定要加上最前面的数字0, 表示 是 8进制数字?? 如果写成 33是不会被转义的.
      表示颜色的转义字符串, 要放在 [和m之间. [表示起点,m表示 终点. 所以 echo  -e 'e[1;32m abc' 或者: echo -e '33[1;32m abc'将输出绿色的abc.
    • 表示颜色不需要在颜色前后 加上 中括号的!

    git的remote操作?

    git remote: 显示 远程仓库的简短信息(名称)
    git remote -v 显示远程仓库的 简短名称 和 详细地址(包括fetch抓取 + merge合并)
    git remote add shortName repos_addr 添加远程仓库: shortname: 简短名称(简名/别名) 后面是远程仓库的详细地址

    • 默认的clone的远程仓库, 的 简名叫做 orign, 只有这个你才可以 push上的

    git的push和pull?

    • push是将本地仓库 (的 修改) 推送到 /提交到 远程 仓库
    • pull 则是 将远程仓库的内容 拉取到 本地机器的 工作树. 主要是在 当远程仓库有更新了, 而本地仓库还没有这些更新; 或者是 当从本地仓库 push到远程仓库时 发生 conflict冲突了, 说明 远程仓库上 (的某个同名文件) 有 本地仓库 所没有的更新了, 也就是 本地仓库 :out-of -date了. 这个时候, 就要将远程仓库 pull到本地 机器的工作区, pull的时候, 会报错, 有冲突

    push 失败的原因?

    error: failed to push some refs to 'https://github.com/onprinciple/onprinciple.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. (因为别人做了的工作, 事先push到远程仓库了, 你当然不能直接push了, 因为如果可以直接push的话, 就会将别人的工作给覆盖掉, cancel掉了) You may want to first integrate the remote changes (所以需要 整合 远程的 更改, 整合就是 先pull下来, 然后消除conflict, 然后再push)
    hint: (e.g., 'git pull ...') before pushing again.

    #### 在push的时候 注意两个问题: 1. 当你要push时, 如果别人(的仓库)已经 push过一次代码到远程仓库了, 那么这时候 即使 是 你的本地工作区中的文件代码 (内容) 跟远程仓库上的 同名文件的内容 完全一样的, 也会报上面的错. 这时候, 仍然要先 pull一次(integrate 整合一次) 1. 当pull时, 自动成功的进行merge时, 只有三种情况: - 那就是你工作区的同名文件的内容 跟远程仓库中的 同名文件的内容完全一致, - 或者前面的完全相同, 而另一个文件(不管是本地仓库的还是远程仓库的)的内容 更多一些; - 两者在对应位置的行, 一个文件的..为空, 另一个文件的...不为空, 有内容...
    • 什么叫冲突: 就是本地仓库跟要push到的目标 远程仓库 中, 有 同一个名称的 文件: 在相同位置处的内容 不同. 当pull的时候 "本地仓库的同名文件会自动的和 远程仓库的同名文件 合并: merge (当merge的时候,如果发生了冲突) :会将冲突记录到 一个同名文件中, 这时候, 只要 将同名文件中 冲突的内容 处理后, 就可以再add, 再commit, 再push了.

    • 什么时候会冲突? 并不一定两个文件 的内容不同 , 合并时就一定会发生冲突, 所谓冲突是指: 两个同名文件, 在同一个位置处 (同一行, 同一列的位置处) 两者的内容不同. 因为合并后 在同一位置处的内容 只能有一个样, 只能保留 其中一个内容.
      但是 在不同位置, 不同行中的内容可以不同 , 实际上内容是 可以 "互补的"


    git status -s(--short简短输出)的结果输出中, M(= modified)表示 该文件有内容的修改! 如果是新增 的untracked文件, 会显示 两个红色 的问号??

    git的好处之一是: 每操作一步, 后面都会有相应的提示, 提示你下一步该怎样做/做什么. 比如 committed后, 会提示你 " use 'git push' to publish your local commits"

    username or password is hidden intentionally: (故意隐藏的)intent: 目的, 意图; intention 目的/意图; intentional 有意的, 故意的; intentionally: 故意地, 有意地.

    commit时 message是必须的 , 否则单是 git commit 命令的话, 会打开vim编辑器提示你输入 commit msg. 如果msg为空, 将放弃提交: Aborting commit due to empty commit message


    history : historian: 历史学家
    'annotate 重音在最前面: vt. 注释, 注解

    关于 git tag命令

    • git tag [-l]

  • 相关阅读:
    Eclipse创建Maven Web项目 + 测试覆盖率 + 常见问题(2015.07.14——湛耀)
    JAVA面试题——JAVA编程题1(2015.07.22)
    Spring 国际化
    BeanPostProcessor 的使用,实现在对象初始化之前或者之后对对象进行操作
    spring 的配置 bean>>property>>name属性
    文件保存
    Spring-demo1(初学者的尝试,2015.03.19)
    新花生壳内网版2.3 + Tomcat7 搭建自己的网站(2015.01.21)
    (原)Struts 相关资源下载
    Xilinx 7 series FPGA multiboot技术的使用(转)
  • 原文地址:https://www.cnblogs.com/bkylee/p/9255179.html
Copyright © 2011-2022 走看看