PS:之前虽然用GitHub搭建博客,但是对于Git的理解非常不透彻,然后最近准备学Linux ,哎,之前挖的坑还是要填起来啊,Linux系统的源码由Git管理,我总要搞清楚Git 是个啥~ 感觉看完廖雪峰老师的教程心里大致有了个数
1. Git 版本控制系统
- 集中式的版本控制系统:CVS及SVN 版本库是集中存放在中央服务器的,要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。最大缺点就是必须联网才能工作。
- 分布式版本控制系统:Git 每个人的电脑上都是一个完整的版本库,就不需要联网,因为版本库就在自己的电脑上。对于多人协作的方式,只需把各自的修改推送给对方,就可以互相看到对方的修改。
所有的版本控制系统只能跟踪文本文件的改动,txt,网页,程序代码等等。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道。而Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
文本文件与二进制文件的区在编码层次上
- 文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码
- 二进制文件是基于值编码的文件
文本文件编码基于字符定长,译码容易些;二进制文件编码变长,存储利用率要高,译码难一些
PS:Git 查看和修改用户名和邮箱 https://www.jianshu.com/p/d24e791a7679
2. Git仓库修改版本
1) 工作区
看的见的文件目录,放自己的文件
2) 版本库或仓库 (repository)
理解成一个目录,这个目录里每个文件的修改、删除,Git都能跟踪 !划重点! Git管理的是修改不是文件
3) 添加文件到仓库的具体步骤
1.创建空的仓库 2.在工作区目录下新建文件 touch create_repository.txt
3.将这个文件添加到暂存区 git add create_repository.txt
4.将暂存区所有内容提交到当前分支 master git commit -m "本次提交说明"
commit就是保存一个文件快照
文件提交到版本库里分两步,暂存区和分支 !划重点! 所以每次修改,如果不用git add
到暂存区,那就不会加到 commit
中
4)修改仓库版本
查看版本历史 git log
查看命令修改历史 git reflog
回到上一版本 git reset --hard Head^
回到上上个版本 git reset --hard Head^^
回到往上的100个版本 git reset --hard Head~100
指定到指定的版本 git reset --hard 版本号
3.远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,且每台机器的版本库其实都是一样的。
实际情况是找一台电脑当服务器,每天24小时开机,每个人都从这个服务器仓库里克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
只要注册一个GitHub账号,就可以免费获得Git远程仓库,本地Git仓库和GitHub仓库之间的传输是通过SSH加密。
1) SSH (Secure Shell) 安全外壳协议
https://www.jianshu.com/p/33461b619d53 嗯~看不懂~不想看
1) 本地仓库同步到远程仓库
GitHub 创建一个新的仓库
将本地仓库与远程仓库关联
git remote add origin https://github.com/Sophia0130/LearnGit.git
下面两条tips:
1> 提示出错信息:fatal: remote origin already exists. 输入
git remote rm origin
再进行关联2> 第一次推送master分支时,加上了
-u
参数,Git不但会把本地的master
分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
- 把本地库的所有内容推送到远程库上
git push -u origin master
- 要本地作了提交,通过
git push origin master
把本地master分支的最新修改推送至GitHub
2) 从远程仓库克隆
4. 分支管理
PS:这部分内容画 branch 分支图比较好理解
创建一个分支,即增加一个分支的指针,并将Head指向该分支
git branch dev
创建了一个分支dev,git checkout dev
将Head指向这个分支
对工作区的修改和提交就是针对dev分支了,新提交一次后,dev指针往前移动一步,而master指针不变
git add
和git commit -m "xxxx"
提交当前分支
在dev上的工作完成后,把master指向当前的dev,完成合并
git merge dev
删除dev分支,即把dev指针删除
git branch -d dev
查看分支:git branch
列出所有分支,当前分支前面会标一个*
号
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
PS:后面还有很多分支管理的内容,但是我觉得我够用了,就不看了,别骂我懒 ~
5. 标签管理
由于版本号那串东西太复杂了,所以打标签可以更容易区分,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。
切换到需要打标签的分支上
git tag v0.0
用于新建一个标签
git tag -a -m "xxx"
可以指定标签信息
git tag
查看所有标签
PS:后面还有操作标签的内容,我也懒得看了 ~
6. 搭建Git服务器
搭建Git服务器需要准备一台运行Linux的机器,需要管理每个人的公钥和控制权限
现在也用不到啊