再谈git和github-深入理解-3
git tag -a 和 -m的区别?
-a是 注解 是单词 "annotate"的意思 , 表示 "给标签一个名字, 标签名
-m 是创建标签时的消息备注
git tag -a 'V1.0' -m '创建1.0版本
tag是对应着某一个commit ID, 是对commit 的简短/易记 表示.
git 要删除 远程仓库上的内容, 包括 远程分支 远程标签 是在git push命令中的远程仓库 origin的后面 加上 冒号: git push origin : branch_name; git push origin : refs/tags/v1.0
git中的对象?
git中的数据结构分为两类, 一类是对象[库], 一类是索引index(对象的索引???) 其中对象objects有四种: (Blob)块,(Tree)树和commit和 标签tag. 由这四种对象构成 git高层数据结构.
所有的版本库数据存放在工作目录下一个名为 .git的隐藏 子目录中.
- 所有存放到Objects下的 文件 都会被计算SHA1值, 然后以该SHA1值作为文件名. 而它原来本身的(human readable)文件名则被放到Tree里面
为什么要用sha1值来命名? 因为这些文件会被反复修改, 每修改一次就要被重新命名一次, 会被存储为一个新的节点, 那么如何命名呢? 总不能像日常中文件较少的时候, 用-1, -2等的方式, 所以用sha1是合适的. - git的目录树, 就是每一次提交时, 对整个目录树的一个快照. 因为目录树包含了其中的所有文件的修改, 因为被修改的文件可能分布在不同的目录中, 所以要重新保存一下整个目录的目录树, git的管理那么多功能, "智能" 就是通过分析目录树而得出的.
==========================
there was evidence of bias against black applicants 有证据表明对黑人申请者有偏见.
bias [bai2s] , 偏见;偏袒; 偏心(球)
applicant: 申请人.
关于git的一些用法
-
如果git设置了全局用户信息, 那么多个账号(即多个仓库下)下面的提交用户会是一个人, 所以如果要单独设置每个仓库的提交者 需要: 第一, 删除原来的全局配置信息
git config --global --unset user.name/user.email
然后在每一个repo仓库下, 分别配置git config --local user.name 'name' /// git config --local user.email 'name@email.com '
-
git tag 的一些操作: 就是通用的/常用的标签操作, 包括标签的创建/标签的列表显示/标签的删除等.
git tag 'tag_name', git tag -l; git tag -d '...', 手动推送标签 git push origin 'tag_name' 必须手动/单独的推送标签.
-
git remote ... , 是对 远程仓库的的相关操作, 比如 git remote 是查看/列表显示有哪些远程仓库, git remote -v 是详细显示有哪些远程仓库
添加远程仓库: git remote add '新增的远程仓库的简洁的别名alias' '新增仓库的地址'
只有origin仓库 可以通过ssh 模拟终端(secure shell)从本地提交 -
git branch 只显示本地分支, 而
git branch -a
则可以 获取到 所有的分支: 包括本地分支和远程仓库上的分支
要将本地分支 上传 到远程仓库, 使用git push origin branch_name
-
如果本地仓库和远程仓库的 同一个名称的 文件有冲突, 使用
git diff <冲突的文件名>
-
git reflog和git log的区别?
git reflog 只是显示整个过程在 **HEAD头 **的变化情况, 而git log会显示所有各种各样的 变化情况. -
git reset --hard <commitID | version_ID> 版本回滚, 可以使用 提交时的id, 这个id可以是4个或5个开头的字符, 没有确切的数字, 只有能够和其他commitID区别就可以了
=======================================
比较 特殊的后置定语? present 修饰定语放在后面??
- 一些以a- 开头的形容词, 比如
the girl asleep soundly is my sister
- 一些以-able -ible结尾表示强烈感情色彩的词, 比如 reliable等
he is the only person reliable
- 形容词修饰不定代词, something strange;
- 现在分词短语; 过去分词短语, 介词短语等修饰名词, 放在其之后
- 还是就是一些 比较 特殊的/固定的 形容词, 这些是个别的特例, 只有记住了, 比如: present 主要有 两种意思, 表示"目前的, 当前的" 时, 放在名词前面, 比如: present situation; 而作为 "出席, 存在"等讲时, 就要放在 名词 的后面, 比如: untracked file present. "存在未跟踪的文件..."
git push是把 本地仓库的当前分支 推送到远程仓库上去. git push <是远程的哪一个仓库> <哪一个分支>
, 比如 git push origin master
就是将 本地仓库的当前推送到 远程origin仓库的 master分支上.
- 如果推送结果有冲突, 就需要 先把远程仓库的相应分支 pull到本地( 当然不能是当前仓库所在目录, 应该是 不同的 另一个工作目录中), 然后使用 git diff 查看冲突/ 比较冲突内容, 解决冲突(在两个冲突文件中, 留自己想要的内容), 然后再 add, commit 再push.
git和svn的比较
- svn采用的是 增量式的保存, 因此每次保存的内容量要少些 但是各个版本之间相互关联/ 相互依赖; 而git保持的每次文件修改的 快照, 每个版本都有完整的代码, 不依赖最初的文件.
- svn 没有"本地仓库" 的概念, 所以, 如果要 "入库" 提交的话 , 就需要联网提交(和远程服务器相连). 而git可以提交到 "本地仓库" "commit"操作不一定需要联网.
关于git的服务器, (远程服务器, 远程仓库), 你可以自己搭建一个git服务器, (不是太麻烦???不过git自己搭建的服务器也是命令行的, 跟apache的服务器差不多 , 配置和启停都是命令行的, 没有图形界面那么直观.) 也可以使用别人 已经搭建好的 git服务器, 其中github(或者说github的底层) 就是一个git服务器,而且具有可视化的界面.
- 在github中, "编辑, 修改edit/ 删除delete 文件, 都算是一次 commit. 默认的msg是" update 1"
- 在github上的这些操作, 其实就相当于 在命令行的一系列连贯操作:
git的edit->add到暂存区-> commit到本地仓库-> push到远程仓库
所以很明显在github上操作跟简便.
修改详情页, 可以显示 增加(+表示)和删除(用-表示) 的行