git权威指南总结五:git克隆

来源:互联网 发布:mysql 查询替换字符串 编辑:程序博客网 时间:2024/06/05 06:29

为什么需要克隆?

git的版本库目录和工作区是在一起的,因此如果删除一个项目的工作区,同时也会把这个项目的版本库删除掉。这样一来,项目也就不复存在了,因此一个项目仅在一个工作区中维护太危险了,所以此时可以使用对项目创建备份库
通常情况下我们创建两个相同的项目,可以使用git pull和git push命令来实现两个项目间的同步。而git又提供了一个克隆的命令:git clone来简化项目间的同步。接下来就进入克隆的世界吧


克隆:git clone的用法

git clone命令主要有如下三种语法:
git clone [repo] [dir]:将repo指向的版本库创建一个克隆到指定目录dir中,该命令会克隆repo对应的版本库所在的工作区,工作区中所有的文件都会被检出
git clone –bare [repo] [dir.git]:与第一种语法类似,区别在于只克隆版本库,而不克隆工作区,通常称为裸版本库克隆,其中第二个参数通常为版本库目录路径,而不是普通的dir目录路径
git clone –mirror [repo] [dir.git]:与第二种方法类似,也是裸版本库的克隆,区别在于它克隆出来的裸版本库会对上游版本库进行注册,这样就可以在裸版本库中使用git fetch命令和上游版本库进行持续同步。(该用法只在1.6.0或者更新版本的git中才提供)


对等工作区

使用第一种git clone语法可以创建两个对等的工作区,首先进行如下克隆(这里gittest是创建好了的版本库,testclone是简单的空dir目录)git clone gittest testclone,然后我们打开之前空的testclone目录可以看到里面备份了gittest的所有数据,第一步克隆成功

这里写图片描述

那么我们如何实现备份库和原始库的提交同步呢?那就需要使用git pull/push命令了。首先进行原始库测试提交git commit --allow-empty -m "aync test commit",然后cd进入testclone底下,直接拉取数据即可:git pull,因为备份库的上游版本库是gittest,我们可以通过命令:git remote -v看到

这里写图片描述

克隆生成裸版本库

前面介绍的是对等工作区,对等工作区的使用缺陷是:在工作区之间执行推送,可能会引发大段的错误输出。而此时使用裸版本库就不会出现这种问题,因为裸版本库本身就没有工作区。它的另一个好处就是空间占用更小
克隆生成裸版本库使用第二种语法:git clone --bare [repo] [dir.git],这里我们简单的进行裸版本库克隆测试:git clone gittest testclone/.git,将会克隆gittest版本库的.git目录到testclone中,进入gittest版本库中进行测试提交git commit --allow-empty -m "async test commit 2,此时如果想要对克隆版本库进行同步,直接在gittest中使用命令:git push ../testclone/.git master:master即可


创建生成裸版本库

首先,我们知道创建版本库是通过命令git init实现的,之前执行的该命令初始化的版本库是带工作区的,那么如何以裸版本库的方式初始化一个版本库呢?同样,我们可以添加–bare参数: git init ==bare testclone/demo.git

这里写图片描述

创建了一个空的版本库之后,如果我们想要将之前的gittest版本库push到这里来怎么办呢?同样和使用克隆裸版本库一样,我们先进入gitttest目录中,然后使用命令:git push ../testclone/demo.git master:master即可将gittest版本库中的数据拉取到裸版本库demo.git中来


小贴士

在实现裸版本库的同步的时候,不知道你们有没有注意到使用git push命令的时候后面为什么要加上master:master?(反正我是注意到了哈哈),而如果不添加就会进行如下报错

这里写图片描述

这是因为:当执行git push命令时,如果没有设定推送的分支,而且当前分支也没有注册到远程的某个分支,将检查远程分支是否有和本地相同的分支名(比如master),如果没有就会报错,而这里创建的裸版本库demo.git还没有注册到远程的,所以我们可以手动指定克隆的分支master


参考文献

git权威指南一书
原创粉丝点击