集中式与分布式
Git属于分布式版本控制系统,而SVN属于集中式,他们的区别有哪些呢?
- 集中式版本控制只有中心服务器拥有一份代码,而分布式版本控制每个人的电脑上就有一份完整的代码。
- 集中式版本控制需要连网才能工作,如果网速过慢,那么提交一个文件会慢的无法让人忍受。而分布式版本控制不需要连网就能工作。
- 分布式版本控制新建分支、合并分支操作速度非常快,而集中式版本控制新建一个分支相当于复制一份完整代码
中心服务器
中心服务器用来交换每个用户的修改,没有中心服务器也能工作,但中心服务器能够 24 小时保持开机状态,这样就能更方便的交换修改。
Github 就是一个中心服务器。
工作流
新建一个仓库之后,当前目录就成为了工作区,工作区下有一个隐藏目录 .git,它属于 Git 的版本库。
Git 的版本库有一个称为 Stage 的暂存区以及最后的 History 版本库,History 存储所有分支信息,使用一个 HEAD 指针指向当前分支。
分支实现
使用指针将每个提交连接成一条时间线,HEAD指针指向当前分支指针
新建分支是新建一个指针指向时间线的最后一个节点,并让HEAD指针指向新分支,表示新分支成为当前分支
每次提交只会让当前分支指针向前移动,而其它分支指针不会移动
合并分支也只需要改变指针即可
冲突
当两个分支都对同一个文件的同一行进行了修改,在分支合并时就会产生冲突
Fast forword
"快进式合并"(fast-farward merge),会直接将 master 分支指向合并的分支,这种模式下进行分支合并会丢失分支信息,也就不能在分支历史上看出分支信息。
可以在合并时加上 --no-ff 参数来禁用 Fast forward 模式,并且加上 -m 参数让合并时产生一个新的 commit。
储藏(Stashing)
在一个分支上操作之后,如果还没有将修改提交到分支上,此时进行切换分支,那么另一个分支上也能看到新的修改。这是因为所有分支都共用一个工作区的缘故。
可以使用 git stash 将当前分支的修改储藏起来,此时当前工作区的所有修改都会被存到栈中,也就是说当前工作区是干净的,没有任何未提交的修改。此时就可以安全的切换到其它分支上了。
SSH传输设置
Git 仓库和 Github 中心仓库之间的传输是通过 SSH 加密。
.gitignore文件
作用是忽略以下文件
- 操作系统自动生成的文件,比如缩略图;
- 编译生成的中间文件,比如Java编译产生的.class文件;
- 自己的敏感信息,比如存放口令的配置文件。