首先要理清概念
Git:什么意思
英文直译过来应该是:饭桶,烂人,废物 。由此可猜测当时git的作者可能是谦虚,自喻为“烂人”,认为自己是个自负的混混。当然也可能是因为作者原来用的BitKeeper不让用了,导致作者自己开发了git,他气不过,要骂人BitKeeper。
也有人认为,git同音get,是“获得,得到” 的意思,帮助别人获得。
当然也同音gay,同性恋???
也可能是guy in there的缩写,and so on
what ever,管他呢 知乎一群吃饱了的讨论过,你可以看看这里https://www.zhihu.com/question/54939657
名字可以看出,码农多数是很Git(废物?扯淡?艹蛋,吃饱了撑的,无聊……)的,所以说兄弟你这样性格,找不到对象啊!
but,我们码农写代码,想要一个什么样的工具:
让我们来个女神幻想:
- 应该是不依赖互联网等,每个人独立开发,互不牵扯,合适的时间(我想什么时间什么时间)互相合并/同步一下对方的代码,合并时记录对方的操作(这样可以在对方做错的时候,骂他and嘲讽他(这样做,好像会使自己感觉牛逼or开心??? 谁知道呢))
- 应该方便我定义不同版本的代码,方便发布产品的1,2,3版
- 应该方便我定义不同的,处于变化的代码,方便开发,测试,发布等变态需求
- 最重要的,工具应该自动化,别让我经常干预,我嫌烦,工具一定要简单,我懒得学!!!
- 要标准化,全世界都一样才好。标注化会带来很多意想不到的好处!
Git的作用定义:
分布式文件版本控制系统
- 分布式:表示各个节点权力相同,也就是不需要服务器,每个人都能在自己电脑开发,开发者定时互相同步代码就行了。(好像满足幻想1了)
2.支持标签,随时随地定义你想要的标签。(好像满足幻想2了)
3.支持分支,分支就是不同的时时会变化的一坨代码。(好像满足幻想3了)
4.git操作好复杂,还基于命令行的,我喜欢图形界面化的。(不满足,so,git不是女神)
5.满足
凑合用吧,要什么自行车,还要手表?
基础知识
1.git是 直接记录快照,而非差异
我理解的快照就是文件在特定时间点的拷贝吧,1点的时候文件内容是123,2点的时候变成了1234,那么1点取个快照就是 (文件:1点+123)
2.近乎所有操作都是本地执行
git是分布式的,只有两台不同的计算机互相同步文件的时候,需要网络,其他操作都可以本机进行,只访问本地文件和资源。git本身分为 工作目录+暂存区+仓库,分布式代表了,git在每一台电脑上都是这样,一摸一样。也就是说,你平时的操作都是操作,工作目录+暂存区。源文件改变了,就提交到缓存。只有不同电脑互相同步代码时,另一台电脑的git充当了仓库(服务器)的角色。
- git保证完整性
Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373
Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
4.git一般只添加数据
为防止丢失数据,最好的方式就是不要提供删除功能。只添加就好了。所以用git,你的代码基本不会丢!
- 了解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哦