Git是其中一种版本控制工具
说到版本控制工具,大致分为三类:分布式版本控制工具,本地版本控制工具和集中式版本控制工具。
Git就是一种典型的分布式版本控制工具,诞生于Linux系统,不需要中央服务器,每个协同开发者都拥有一个完整的版本库。任何协同开发者用的服务器发生故障,事后都可以用其它协同开发者本地仓库恢复。
优点是:不再受网络影响了。如果要将本地的修改,推送给其它协同开发者,还需要一台共享服务器,所有开发者通过这台共享服务器同步和更新数据。
本地版本控制工具:功能比较单一,很难实现多人协同开发。
SVN属于集中式版本控制工具。单一的集中管理的服务器,保存所有文件的修订版本,协同工作的开发者都通过客户端连到这台服务器,取出最新的文件或者提交更新。
缺点是:
1.如果集中管理的服务器出现故障,将会导致数据(版本)丢失的风险。
2.另外协同开发者从集中服务器中更新数据时,严重依赖网络,如果网络不佳,也给开发带来诸多不便。
Git基本操作:
Git分支
Git远程共享仓库(多人协同开发):
1.创建共享仓库以.git结尾的目录:
2.向共享仓库共享(同步)内容1.mkdir xxx.git创建以.git结尾目录
2.cd xxx.git进入这个目录
3.git init --bare初始化一个共享仓库(裸仓库)
1.进入到项目根目录
2.git push 用户名@IP地址../repo.git master(远程仓库目录)
这样就把yike中的项目同步进repo.git中。(共享仓库里面多出了一个master分支)
3.从共享仓库里取出内容
1.新创建一个目录(模拟另一个开发者)
2.git pull 用户名@IP地址.../repo.git master(远程仓库地址)
这里就有一个master分支
4.添加远程仓库的地址
git remote add student@192.168.141.95:/home/student/my.git
git remote 查看远程地址
git remote show +远程地址(查看详细信息)
5.克隆仓库——git clone 远程地址,如若要修改目录则后面加空格写上新名字
.git仓库也被克隆下来
克隆之后默认把长地址改为origin
所以再push的时候不用git remote add 别名
直接git push 别名即可git push origin cart:master
把本地的cart分支添加到远程的master分支(如若没有master分支则会添加一个分支)
git push origin cart(不写的话就是本地和远程的分支名字一样)
删除远程分支git push origin --delete 分支名称
删除远程分支git push origin :分支名称
Git高级:
1.gitignore忽略文件
在项目根目录下创建一个.gitignore文件,可以将不希望提交的罗列在这个文件里,如项目的配置文件、node_modules等
https://github.com/github/gitignore
2.比较差异
当内容被修改,我们无法确定修改哪些内容时,可以通过git diff来进行差异比较。
git difftool 比较的是工作区和暂存的差异
git difftool “SHA”比较与特定提交的差异
git difftool “SHA”“SHA”比较某两次提交的差异
git difftool 分支名称 比较与某个分支的差异
3.回滚(撤销)操作
git reset 可以改变HEAD的指向
--hard 工作区会变、历史(HEAD)会变, 暂存区也变。
--soft 只会变历史(HEAD)
--mixed(默认是这个选项)历史(HEAD)会变、暂存区也变,工作区不变
git checkout SHA -- "某个文件",代表只是从SHA这个版中取出特定的文件。和git reset 是有区别的,reset 重写了历史,checkout 则没有