一、关于版本控制
Git官网版本控制介绍 https://git-scm.com/book/zh/v1/起步-关于版本控制
个人理解:
集中式的版本控制系统:
首先有一个中央服务器,保存所有文件及修订版本,开发者们都通过客户端连到这台服务器,checkout取出最新的文件或者commit提交更新,假如你进公司的时候,项目已经完成大部分,你checkout获取代码只是最新版本的代码程序;
优点:
易于管理,集中式服务器更能保证安全性;符合我们正常的逻辑思维;每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
缺点:
服务器出现问题的时候,开发者都无法提交更新,无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录。
服务器压力太大,数据库容量暴增;
分布式的版本控制系统
客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。可以指定和若干不同的远端代码仓库进行交互。
优点:任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复;适合分布式开发,强调个体;速度快、灵活,通过哈希值判断文件数据是否更改,效率更高;离线工作;
缺点:代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息;
SVN属于集中式的版本控制,Git属于分布式的版本控制;
SVN与Git对比:
Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。
svn是通过对比文件来判断文件的修改更新等,效率比较低;
git是使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串,通过哈希值判断文件数据是否更改,效率更高;
二、安装并配置Git (这里指记录Mac版)
1、安装Git官网:https://git-scm.com/book/zh/v1/起步-安装-Git
2、配置用户信息:https://git-scm.com/book/zh/v1/起步-初次运行-Git-前的配置
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "xxx"
$ git config --global user.email xxx@xxx.com
如果用了
--global
选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global
选项重新配置即可,新的设定保存在当前项目的 .git/config
文件里。
$ git config user.name "xxx"
$ git config user.email xxx@xxx.com
3、查看配置信息:git config --list
4、学习 config 命令可以怎么用 $ git help config
三、Git基础
1、初始化项目
如果需要自己创建项目的话,打开终端,cd 到你想要文件夹地址,使用$ git init 创建新项目,这时候文件夹內会创建一个.git文件夹,提示创建了一个空的仓库,如果没有.git文件夹可能是文件夹为隐藏状态,使用ls -ah查看即可,如下图:
在文件夹內放入一个README.md文件(可以手动床架,也可以使用终端创建),输入命令
$ git status,检查当前文件状态,如下图所示:
可以看到新建的README
文件出现在“Untracked files”下面,未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件(新创建的文件);
使用命令$ git add
xxx(文件名或者.)开始跟踪一个或多个新文件,再输入git status查看文件的状态,会看到 README 文件已被跟踪,并处于暂存状态,如下图所示:
然后需要提交README文件,输入命令$ git commit -m "添加README.md文件",如下图所示:
现在修改README文件,例如添加一句“修改测试”,保存之后再终端输入$ git status 查看状态,已修改区状态,如下图:
再执行git add . 添加到暂存区,再执行$ git commit -m "xxx",提交修改即可。
最基本的提交已经完成,可以使用$ git log 查看提交信息,到这里本地的git仓库就完成了,也可以把本地的仓库推送到服务器上,首先服务器上要创建好git项目,例如创建一个Demo项目,输入命令:
$ git remote add origin 你的远程库地址(这个URL就是我们在服务器中的地址,我们在web端手动创建的库,例如:git remote add git@192.168.x.xxx:xxx/Demo.git) // 把本地库与远程库关联
$ git push -u origin master // 第一次推送时
$ git push origin master // 第一次推送后,直接使用该命令即可推送修改
结果如下图所示:
2、从现有仓库克隆
在服务器上创建项目,执行:
$ cd 存放项目的文件夹路径
$ git clone url (这个URL就是我们在服务器中的地址,例如:git clone url git@192.168.x.xxx:xxx/Demo.git)
克隆完成就可以在文件夹中添加项目等文件,提交push。
3、创建分支及合并
一般我们都是从master分支上克隆项目,但是提交的时候还是提交到自己创建的分支上,在合并到master,这样可以防止因自己错误导致项目无法运行。
$ cd 项目所在文件夹
$ git checkout -b 分支名(例如:git checkout -b dev,相当于$ git branch dev $ git checkout dev)
服务器上项目需要创建同名的分支,这样就可以看到dev分支的提交记录等,如下图:
查看分支:
$ git branch (*代表当前分支,再提交的时候就会提交到dev的分支上面)
分支合并:
$ git checkout master (切换到master)
$ git merge dev (合并分支dev)
4、忽略某些文件
我们可以创建一个名为 .gitignore
的文件,列出要忽略的文件模式
创建:$ vi .gitignore
点击i开始输入,例如输入*.[oa] 第二行输入*~,输入完成后点击esc键,再shift+:输入wq退出。
第一行告诉 Git 忽略所有以 .o
或 .a
结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~
)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。
更多的介绍:https://git-scm.com/book/zh/v1/Git-基础-记录每次更新到仓库#忽略某些文件
5、push后修改提交的信息,git commit
Git commit信息push后,如何修改,git commit --amend可以修改最后一次commit信息,但对于历史提交信息,需要使用rebase命令。
1、例如修改的commit是倒数第三条,使用下述命令:git rebase -i HEAD~3
参考:https://www.cnblogs.com/shenh062326/p/git.html
参考: Git官方文档:https://git-scm.com/book/zh/v1/起步