Git和CVS及SVN比较
CVS和SVN是集中式的版本控制系统,文件的变化历史都保存在服务器端的,客户端是没有的,如果客户端想获取历史版本的话需要从服务器端下载下来,如果断网就获取不到了。
Git是分布式的版本控制系统,不仅在服务端有历史版本且在客户端也保留有历史版本。
下图是SVN版本控制的原理示意图
对于File A文件,内容发生变化了,就会记录产生新文件A1和原文件A的差异,而跨一个版本到A2由于Version 3没有改变A1所以只记录Version4和Version2的差异。
下图是Git版本控制的原理示意图
对于A文件发生变化成为A1文件,会保存一个A1文件的快照,而到Version3是没发生变化,就会对Version2中的A1文件产生一个链接,这样就节省了存储空间。
总结:
- SVN和CVS是记录不同版本之间文件的差异,因此如果要获取不同版本文件必须要在联网的条件下才能进行;
- Git是记录不同版本文件的快照,在客户端保存了各个版本的文件。
github账号注册-仓库的创建
安装好Git后并不能使用,还要在github.com注册账号,创建仓库
其中用户名和邮箱在下一步需要使用。
Git的简单配置
安装及创建好仓库后,需要配置一下自己的邮箱和用户名,这样提交的代码如果有错误,别人可以联系到你。
在一个文件夹中点击鼠标右键
选择Git Bash Here,打开一个命令行窗口,输入如下命令设置自己的用户名和邮箱
从Git库中下载代码
如果远程Git库已经创建,那么就可以下载了到本地
首先在本地新建一个用于存储下载代码的版本库,然后再该文件夹中打开bash shell
分别执行如下代码
git init
此时本地文件夹中会多一个.git文件夹
然后执行以下命令
git clone 远程版本库地址
即可将远程的代码库里的代码下载都本地了
Git大致工作流程
1. 查看状态
在版本库中建立一个文件hello.txt,查看状态
由上图可知此时有Untracked files(未追踪文件)
将新增文件添加到缓存区
通过git add “文件名”或git add . (此时是将工作目录中所有文件提交)命令将 文件提交至缓存区
由上图可知,此时是 Changes to be committed状态
将缓存区文件提交至本地仓库
输入 git commit -m “描述信息” 文件名或 .将文件提交至本地仓库
如上图所示,此时 “nothing to commit, working tree free”表名暂存区中没有内容提交且工作目录也没有内容添加至缓存区中。
改变文件内容
在hello.txt中添加了新内容,再看Git的状态
此时是“Changes not staged for commit”和"no changes added to commit"
表名此时工作目录中有文件没有提交至缓存区进行commit且缓存区中没有需要commit的文件。
接下来将文件提交至缓存区
此时状态是缓存区中有需要提交到本地仓库的已经改变内容的hello.txt文件
而现在如果我们再在文件目录中再次改变hello.txt文件内容会处于什么状态呢?
可以看到此时“Changes to be committed”和“Changes not not staged for commit”表名此时缓存区中有改变的hello.txt 没有commit同时工作目录中还有再次改变的hello.txt文件没有添加到缓存区中。
在将缓存区内容提交(commit)到本地仓库时,可以使用两种方法:
- 执行git commit -m “提交内容的描述” 文件名或 .
- 执行git commit 文件名或. ,这样会进入命令行模式文本模式,在这里写入提交的描述信息
关于使用到的命令总结:
a. 跳转到最后:shift+g
b. 下面新加一行:o
c. 编辑内容:此时可以写描述信息了
d. 退出vi编辑模式:esc
e. 保存退出: shift+zz
将文件提交至远程仓库
将本地仓库中的文件提交至远程仓库使用git push即可。
将远程文件下载到本地
在远程仓库中建立了新的文件怎么下载到本地呢?
直接输入 git pull 命令即可
总结:
- git有四种状态:工作目录、缓存区、本地仓库、远程仓库;
- 工作目录-》缓存区:git add 文件名或 .(相当于当前目录中所有文件都提交)
- 缓存区-》本地仓库:git commit -m “描述信息” 或git commit 然后进入vi编辑器填写描述信息;–更正一下git commit后面可以不用指定文件夹
- 本地仓库-》远程仓库:git push
- 远程仓库-》工作目录:git pull
更具体的学习可以参考:
很全面及详细的学习资料