git版本控制管理实践-2

给网站设置一个 “根目录下的logo.ico”, 还是很有必要的,比如赶集网,这时在 “历史”搜索时, 就可以根据 网站的 logo.ico 很轻松的就能够找到网页-网站了.


如何给一个文件添加 /设置 acl? 为什么要给文件设置 acl? http://www.cnblogs.com/ZhangShuo/articles/1836971.html

  • 给文件添加acl的木的?
    如果要让一个other用户, 如john,能够有权去 读写 一个foo文件: 方法一, 让other能够读写foo, 这样太危险, 除了john能够读写foo外, 其他用户也能狗读写foo了; 方法二, 将john加入到 foo的所属组, 如foos, 但是这样的话, 又会扩大john的权限了, john除了可以读写foo外, 还可以 对读写所属组foos中的其他文件, 方法三, 使用sudo, 让john以foo所有者的身份去指向. 但是这样要精密的去控制 sudoers文件的权限格式, 当文件数量, 和用户增多时就不灵活了.
    所以, 使用 acl对文件进行控制就很有必要了.

  • 使用acl需要安装: acl和libacl两个包...

  • fstab和mtab, 两个列表的区别, fstab是系统启动时, 要加载(要挂载)的文件系统, 而mtab(mount, table) 是系统当前已经挂载的 文件系统/或分区.mtab会随着设备/ 分区的挂载和卸载而动态变化... http://blog.163.com/qimeizhen8808@126/blog/static/165119518201281892121501/

附:

文件所属的组, 不一定是 文件的所有者所属的组..!!

给一个文件加上 ACL_USER, ACL_GROUP 的属性值 后 这个文件 就叫做 acl文件.

  • 注意ACL_USER, ACL_GROUP不等于文件的other权限!!
  • 在ll 命令的返回结果中, 第一个字段是 文件权限: 包括: rw-r--r--+/./空格, 最后的这个 加号, 点号, 空格是紧挨着前面的权限的, 它们的一个整体表示 权限...

**以下是 acl的两个重点和难点: 一个是 ACL_MASK (从总体上来控制 文件的 acl权限) , 另一个是 Default ACL **

  • 当一个文件具有了 ACL_USER 或ACL_GROUP 后, 会同时设置ACL_MASK的值, 这时ACL_MASK的值由于是掩码, 所以它表示的是 ACL_USER, ACL_GROUP, ACL_GROUP_OBJ这三种权限中的最大的那一个. 在用ll列出来的第二组的权限就是 acl_mask的值, 而不再是 ACL_GROUP_OBJ即所属组的权限. 虽然你看到的第二组的权限是rwx, 而实际上所属组的权限只是rw, 没有x权限...

所以当文件有了acl后面有+的时候, 应该用getfacl来查看一下文件的具体权限, 以免发生混淆:

设置 ACL_MASK为只读: 则ACL_USER , ACL_GROUP的有效 权限都为只读, 也就是说, ACL_MASK是最大权限, 反过来, 所有用户和组的权限都受它压制suppress:

setfacl的选项:

-m, -M FILE, 都是设置acl, 一个是直接设置, 另一个是从文件FILE 中引入规则;
-x, -X FILE, 如同上面的
-b 全部删除acl

关于目录的 Default ACL 设置 -- 是指设置 目录, 非文件 的默认acl, 其下的文件或目录都将继承这个目录的acl规则

首先, 需要注意的是, setfacl 中的-d,选项 , 不是用来设置目录的默认acl的;
其次, setfacl的设置访问规则, 都是用的 -m 选项, 后面的规则通常有四种: -m u:foo:rwx, -m g:foo:rw, -m mask::r--, 以及 -m d:foouser:rw. 都是使用的-m 来创建.

  • 对文件, 目录的acl权限控制 条目, entries, 排列的顺序是: user-> group-> mask ->other...
  • 一旦设置了任意一个用户的default后(如: default:user:foo:rw) , 相应的会创建其他default规则...

  • **对于目录而言, 用户的rw权限是指 对目录下的文件/目录有查看, 读取,和 修改的权限, 而 x 权限才是对目录 有 创建和删除 新文件/新的子目录的 权限... **
  • 当对目录设置了 d:foo:rw mydir后, foo对目录mydir没有 创建和删除文件的权限, 还要用 : setfacl -m u:foo:rwx mydir/ 赋予用户对目录的写权限..才能在目录下创建和删除文件, 但是这个权限 不会被 mydir下新建的文件 或 子目录所继承, 而只有 default的acl 才会自动被添加, 被继承...
    下图中, user:foo:rw 就是通过Default acl 增加上去的:

  • 要删除文件的acl, 可以使用两个命令都可以: setfacl -b foo; 或者: chacl -B foo. 这个是删除所有的acl条目, 会使ll不再显示加号; 不要使用 setfacl -x foo;这个会报错的, 因为 -x, -X 是要删除acl列表中的某一条 具体的 acl条目: remove entries from ACL of the file. 格式是: setfacl -x === --remove=acl要指出具体的acl条目

mount -o remount, acl /data : 其中的-o, 表示选项 --options : comma-separated list of mount options

effective: adj. 有效的, 有效果的; 生效, (开始)起作用的; 有力的...
when does the new system become effective?
advertising is the most effective method of promotion.
system: 不只是"系统 体系"的意思 ,还有: 设备; 制度; 身体...的意思...

stroke: n, v. : (球,棍子)一击; 游泳姿势; 描边, 笔画; 轻抚, 抚摸
what a beautiful stroke
he likes breast stroke / butterfly stroke
can i stroke your dog?
stroke: 是可数名词, 也是一个 规则动词: strokes, stroked , stroking..
在gimp中, stroke 还可以作为: 给选区 描边(用这个方式来绘制 矩形, 椭圆等...): stroke a selection: paint along the selection outline.


不管是logs, 还是.git下的 HEAD, 都是对应的refs/heads/下的对应 版本头的指针. 如: .git /HEAD 是.git/refs/heads/master...等的链接指针

在 .git/logs/heads/HEAD中, 记录了版本指针头 指向的变化情况: logs/refs/heads/... 也存放了多个指针...

在commit记录中, 的 2 insertions(+), 1 deletion(-) 表示 的是 改变的/增加的/删除的 行数...

我们说要回滚到 之前的某个版本, 是 "针对"某个 具体的 分支而言的, 可以 是主分支master, 也可以是 其他分支而, 但 不是针对所有的分支 而言的. 因为每个分支, 都有独立的, 互不干涉的commit记录. 不同的分支, 如同白天和黑夜一样, 永远不会相交. 相互间是相互隔离i的空间...

所以, 你要回滚到 之前的某个 commit. 回滚到之前的某个版本, 就先 "查看" 你当前所在的分支的commit 记录. 然后, 根据这个提交记录来 回滚:
git reset的命令格式: 有三种形式, 通常使用的是第三种形式: in the third form, ... , reset the current branch HEAD to the special commit.

使用 git reset --soft eecb后, 就只有三次提交记录了. (但是, 由于这是使用的是--soft, 所以只是回滚了commit提交记录, index和working tree都没有改变, 然后, 重新提交, commit后, 又有了4 次提交记录, 但是这时的 第4次的 object对象的sha-1 值就不再是原来的 sha-1值了, 表示对象已经改变 : 原来的第4次 commit时的 object sha-1: d6c4...., 后来的object的 sha-1: d305

**第二次, 使用git reset --hard 3971, 这时, 提示HEAD 都变了, 回滚到第2次提交时的状态了, 连commit 版本库, index,和working tree都 回滚到第二次的 状态了: **

最后, 小结: git对象的sha-1: 共160 bits, 共 40 个16进制的 字符. 而第一次提交时, 的 sha-1是 40个0, 表示, 原来没有提交, 所以全是0.... 回滚到某个 commit时的状态, 的commit, 只需要前面几位 字符就可以了, 如前面的 4位字符.

如何查看.git/objects中 的对象的内容:

主要有两个命令: git cat-file / 和 git ls-tree , 重要的时 git cat-file命令:
git cat-file 专门是查看object的内容的: 有两种用法:

  • git cat-file -t (查看对象: 可以是 commit的提交sha-1名字, 也可以是 tree的sha-1): 这个是确定sha-1数字序列的类型
  • git cat-file 类型[commit/blob] 要查看具体内容的 sha-1
  • 由截图可以看出, objects的树 tree的 blob中, 确实是存放了 源代码的 内容: 因为每次提交, 都生产了一个tree, 而一个 tree中, 包括blob, 和 子树. blob的内容中, 正是 存储了 提交的 源文件的 代码!!!
  • 如何 列出 一棵树中 保存的内容呢? 显示树的 目录结构的命令, 就是: git ls-tree 树的sha-1

如何查看.git下的objects中的内容?

  1. 包括可能的几种对象: commit对象, tree对象, blob对象, 子tree对象, tag对象等等

  2. 每种对象的命名和组织方式: 先直到对象的40位sha-1 字符序列, 然后, 取对象的前两位字符作为文件夹名称, 然后在文件夹里面包含文件, 文件名称是 sha-1的后38位字符..

  3. 比如一个blob对象, 它是存放具体的/实际的源代码内容的, 它的 40位sha-1字符序列中, 它的前2位字符作为目录名称, 后面的38位字符组成的文件放在这个目录中, 这个文件就存放提交的 当前这次commit时的源文件的 源代码...

  4. 这些对象文件都是 不可读的, 因为他们都是 压缩过了的, 同时 给原文件 加上 标注 文件的 类型和长度 的文件头 信息....(所以跟原文件的字节数不同, 一般比原文件大 10几 , 20几个字节)..


Mohs: 德国矿物学家,摩氏硬度. 它说: 10种矿物质的硬度从1到10, 滑石的硬度=1,..., 正长石的硬度=6, 石英=7, 黄石=8, 刚玉=9, 金刚石=10. 材料遭受冲击时的强度, 是美国二战时发展起来的 "冲击力学". 强度(通常的强度, 是指抗拉强度) strenthen, 硬度hardness, 抗压强度, 抗裂强度: fracture toughness.几个名词, 是不同的. 硬度和抗压强度的区别, 前者是材料抵抗更硬的物体, 侵入材料表面的能力, 而抗压强度则是 物体整体 抵抗破碎的 能力.


关于git/config/[core] 中 文件的filemode=true?

它是说, 如果修改了文件的mode, 如用chmod改变了文件的模式, 但是 没有修改文件的源代码的 文本内容, 要不要把文件看成是修改了的, 再git diff的时候, 报出了?


杂项:
加密算法: RSA: 谐音"瑞萨", 日本东京都(tokyo: t2ukj2u) 亚洲第一大城市, 世界三大城市: 东京-伦敦-纽约. 瑞萨半导体是由日立和三菱共同创建的...是家电, 汽车电子的全球十大半导体公司. RSA 公钥加密算法, 是由三位麻省理工的科学家发明的.
量子计算机是针对 不可逆计算机 而建造的, quantum computer, 量子距离: 从A点到B点,可以不经过ab之间的任何一点.从a点消失, 在b点可以同时出现. 奥地利物理学家薛定谔之猫, 是用来描述量子的 叠加态的...
在RSA算法, 现在面对 "并行计算"和 "量子计算机", 也不是坚不可摧的了...
RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
RSA算法, 是一种非对称算法, 不像其他加密算法, 加密和解密密钥都是一个, 它是一对密钥, 一个是加密密钥, 是pk, 是公开的, 对原文使用pk进行E(encrypt)加密算法, 生成可以在网络上公开传播的密文, 其他任何人都可以得到 pk和 密文, 甚至 decrypt(D解密算法), 但是, 由于解密的 私钥 在信息所有者手中, 所以你是无法还原原始信息的 这个过程如下图所是:


当从github上下载git仓库后, 连同工作目录和.git仓库都会被 clone下来. .git目录所在的父目录就是 工作目录, 而且, 从work tree= working space = working directory 到 index 到 commit后, 才是真正的repo仓库. .gitignore文件 通常就放在 工作目录下:

posted @ 2016-10-28 20:21  noitanym  阅读(523)  评论(0编辑  收藏  举报