从github上clone代码速度(git命令clone代码到本地)

一、简介

在介绍git操作命令之前,我们先来了解一段故事!

很多人都知道,Linus 在1991年 创建了开源的Linux操作系统,此后的三十多年里,Linux 系统不断发展,已然成为全世界最大的服务器系统软件了。

Linus 虽然创建了Linux操作系统,但是Linux操作系统的壮大是得益于全世界热心的志愿者参与的,这么多人在世界各地为Linux操作系统编写代码,那Linux操作系统的代码是如何管理的呢?

在 2002 年以前,世界各地的志愿者把源代码文件通过diff的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!

不过,到了 2002 年,Linux操作系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满。

可能有的同学会发出疑问,不是有 CVS、SVN 这些免费的版本控制系统吗?为什么不用它们来托管Linux操作系统代码?

因为 Linus 本人坚定地反对 CVS 和 SVN,原因是这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。

于是 Linus 选择了一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统。

随着 Linux 社区对 BitKeeper 版本控制系统的深度了解,原本安定团结的大好局面在 2005 年被打破了,原因是 Linux 社区牛人众多,一名叫 Andrew 的开发者把 BitKeeper 商业授权协议破解了(这么干的其实也不只他一个),之后被 BitMover 公司发现了(监控工作做得不错!),于是 BitMover 公司怒了,要收回 Linux 社区的免费使用权。

Linus 向 BitMover 公司道了歉,保证以后严格管教弟兄们,嗯,想要别人不破解,这其实是不可能的。

之后,Linus 花了两周时间自己用 C 写了一个分布式版本控制系统,这就是我们今天要介绍的 Git!(牛人是怎么定义的,大家可以自行体会一下)

一个月之内,Linux 系统的源码已经由 Git 管理了!

之后的事情,想必估计都知道,Git 迅速成为全世界最流行的分布式版本控制系统,在代码托管方面,基本上是一骑绝尘!

尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数的开源项目开始迁移至 GitHub,包括 jQuery、PHP、Ruby等等!

从github上clone代码速度(git命令clone代码到本地)

说了这么多,Git 是一款什么样的软件?和 CVS、SVN 这些免费的版本控制系统有什么区别呢?

上文中我们也说到了,Git 其实是一款分布式的版本控制系统,可能你还是不太理解什么叫分布式,我们先聊聊什么是集中式!

集中方的版本控制系统,简单的说,就是当你要干活的时候,用的一般都是自己的电脑,首先要从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

集中式版本控制系统,好处就是统一管理,但是坏处也很明显,必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

分布式版本控制系统,与集中式版本控制系统最大的不同就是:没有中央服务器这个东西。

每个人的电脑上都是一个完整的版本库,可以说每个电脑都是中央服务器,当你工作的时候,不需要联网,可以直接提交工作的内容,如果对方的电脑想要知道你的工作内容,你只需要把对应的工作文件推送过去就可以,对方就可以看到,其他不相关的文件不需要推送给对方!

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

既然git这么受欢迎,下面我们就开始git的学习之旅吧!

二、安装 GIT2.1、在 Linux 上安装 Git

如果你当前的电脑操作系统是 Linux,安装起来会非常简单,首先试着输入git,看看系统有没有安装Git:

$gitTheprogram’git’iscurrentlynotinstalled.Youcaninstallitbytyping:sudoapt-getinstallgit

像上面的命令,有很多 Linux 会友好地告诉你 Git 没有安装,还会告诉你如何安装 Git。

按照提示,输入如下命令,即可安装git!

sudoapt-getinstallgit2.2、在 Mac OS X 上安装 Git

如果你正在使用 Mac 做开发,有两种安装 Git 的方法!

一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。

第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,因为Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单Xcode->Preferences,在弹出窗口中找到Downloads,选择Command Line Tools,点Install就可以完成安装了。

Xcode是Apple官方IDE,功能非常强大,是开发Mac和iOS App的必选装备,而且是免费的!

2.3、在 Windows 上安装 Git

在Windows上使用Git,就比较傻瓜式了,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始菜单里找到Git->Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

以上全部安装完成后,还需要最后一步设置,在命令行输入:

三、GIT 操作手册

在上文中,我们对git的安装进行了一些简单的介绍,等环境准备完成之后,我们就可以开启GIT之旅!

3.1、配置管理

同样可以用如下的命令,进行修改!

同时,还可以通过如下命令查询配置

#查看当前配置gitconfig–list

如果你配置的仓库,用户和密码填错了,可以通过如下命令方式清除,然后重新配置!

gitconfig–system–unsetcredential.helper3.2、版本管理

版本库管理是GIT最重要的核心模块,具体操作如下!

当你想向GIT里面提交一个文件的时候,首先需要初始化一个版本库

#初始化一个版本库gitinit

然后,可以通过如下命令,添加或者修改一个的指定文件!

#添加或者修改一个的指定文件gitadd<文件名>

当然,你还可以通过如下命令,添加当前目录下全部的文件!

#添加或者修改的所有文件gitadd–all

添加完成之后,还需要提交文件,命令如下

#提交文件gitcommit-m<注释>

例如,提交所有的内容提交到版本库!

#例如,提交所有的文件添加修改提交到版本库gitcommit-m”注释内容”

有些时候,我们需要通过一下命令,查询当前工作区的信息。

比如,查看当前工作区的状态,这个基本上经常用到!

#查看当前工作区的状态gitstatus

查询当前版本库的历史提交日志纪录,这个会在版本回滚的时候用到!

#查看历史日志gitlog#查看精简日志gitlog–pretty=oneline

查看当前文件的内容!

#查看文件内容cat<文件名>

查看历史提交的命令!

#查看历史提交的命令gitreflog

查看文件修改内容!

#查看当前文件修改内容gitdiff<文件名>

查看工作区和版本库里面最新版本的区别!

#查看当前文件和版本库里面最新版本的区别gitdiffHEAD–<文件名>

如果你想将当前文件回滚到历史上某个时间点提交的文件,可以通过如下命令!

#首先查询你要回滚到历史上某个时间点的版本IDgitlog–pretty=oneline#然后通过如下命令,进行回滚操作gitreset–hard<版本id>

当你修改了某个文件,但是没有提交,想要回滚,怎么处理呢?可以通过如下命令进行撤回!

#撤销某个文件的修改gitcheckout–<文件名>

如果你想全部撤销,可以通过如下命令撤回全部!

#撤销所有修改gitcheckout.

当然,如果你不想要某个文件了,可以通过如下方式删除!

#删除指定文件gitrm<文件名>3.3、分支管理

GIT的分支管理,非常强大,也是它远胜 CVS、SVN 这些免费的版本控制系统一大神器!

GIT在初始化版本库的时候,会默认创建一个master分支,也就是主干分支!

如果你想创建某个分支,可以通过如下命令创建!

#创建分支gitbranch<分支名>

比如,创建一个develop分支!

gitbranchdevelop

当执行这个命令之后,GIT的develop分支指针会指向到当前分支当前位置!

怎么切换到分支呢?我们可以通过git checkout命令,实现分支的切换!

#切换分支gitcheckout<分支名>

当然,你还可以一步到位,通过如下命令,创建并切换分支!

#创建分支 切换分支gitcheckout-b<分支名>

通过下面这个命令,可以查询当前分支!

#查看当前分支gitbranch

如果分支切换失败,可以通过git status命令查询一下为什么会失败,分支切换失败多半是当前工作区的代码没有提交到版本库里面导致,可以检测一下是不是代码都提交到本地版本库!

在平时的开发过程中,我们会经常碰到需要合并分支,比如将develop分支合并到master分支,怎么处理呢?

可以通过如下命令,实现快速合并!

#快速合并分支gitmerge<分支名>

在合并的时候,可能会出现文件发生冲突的情况,如果出现,就排查修改文件,然后提交!

当然,你还可以通过如下命令,来实现分支合并提交!

#普通模式合并分支 提交gitmerge–no-ff-m”mergewithno-ff”<分支名>

如果某个分支,你不想要了,想删除,可以通过如下命令实现!

#删除分支gitbranch-d<分支名>

如果删除过程中,出现报错,可以下面这个命令,强行删除!

#强行删除分支gitbranch-D<分支名>

最后,你可以通过下面这个命令,查询当前版本分支的变动情况!

#查看分支合并图gitlog–graph3.4、标签管理

标签管理,也是git最最核心的功能!通过标签,我们可以很快的定位到仓库中某个版本,并进行代码回滚!

可以通过如下命令创建某个标签,比如v1.0标签。

#创建标签gittagv1.0

查看标签情况

#查看所有的标签gittag

如果你想看某个标签,具体的详情,可以通过如下命令!

#查看标签信息gitshow<标签名>

如果你不想要了,可以通过如下命令,删除标签!

#删除标签gittag-d<标签名>

当然,如果你想针对某个历史版本,打标签,可以通过如下方式实现!

#查看历史版本idgitlog–pretty=oneline–abbrev-commit#对某个版本ID,打上标签,名称v0.9gittagv0.9<版本id>

我们还可以将标签推送到远程分支,命令如下:

#推送全部标签到远程库gitpushorigin–tags

删除远程标签库

#删除本地标签gittag-dv0.9#推送到远程分支gitpushorigin:refs/tags/<标签名>3.5、忽略文件管理

GIT还为我们提供了一个巨大的利器,我们可以通过配置忽略文件,将当前目录中某些文件忽略掉,不提交到版本库里面,具体怎么操作呢?

首先在当前版本库根目录下,创建一个.gitignore文件,内容自己定义,比如下面这个内容,就是小编定义的忽略文件,/target/!.mvn/wrapper/maven-wrapper.jar###STS###.apt_generated.classpath.factorypath.project.settings.springBeans.sts4-cache###IntelliJIDEA###.idea*.iws*.iml*.ipr*.class###NetBeans###/nbproject/private//nbbuild//dist//nbdist//.nb-gradle//build/###mac###.DS_Storefile/logs/*/targettarget/

然后,执行如下命令,让忽略文件生效!

#清除缓存gitrm-r–cached.#添加所有文件gitadd.#提交到版本库gitcommit-m”update.gitignore”#提交到远程分支(如果有的话)gitpush3.6、远程仓库管理

以上介绍的基本上都是本地仓库的操作,如果我们需要与其他的电脑协助工作,怎么处理呢?

如果我们本地没有仓库,我们可以直接从远程分支里面拉取一个版本库同步到本地,命令如下。

#从远端服务器创建主分支gitclone<url>

我们可以通过如下命令,查询远程分支的详情

#查看远程库gitremote-v

如果你是通过git init方式初始化了本地仓库,想与远程分支关联,可以通过如下命令实现!

如果你填写错了,想删除,可以通过如下命令删除,再重新添加!

如果你之前没有推送内容到远程库,可以通过如下命令推送

#首次推送到远程库并创建分支gitpush-uorigin<分支名>(第一次将内容推送到master分支)

后期推送到远程分支,可以这样操作

#后期推送到远程分支gitpushorigin<分支名>#可以简写,快速推送gitpush

有时候,我们还需要查询远程分支的情况,可以通过如下命令操作:

#查看远程的所有分支gitbranch-a

有时候,我们还需要从远程服务器拉取某个指定的分支到本地,可以通过下面这个命令完成:

#从远程服务器拉取某个指定的分支到本地,并创建分支gitcheckout-b<分支名>origin/<分支名>

大部分的情况下,当远程服务器更新了版本库,通知我们也要更新时,通过如下方式,即可将远程的版本库最新的内容同步到我们本地电脑版本库里面。

#拉取远程分支内容,并同步到本地版本库gitpull

有时候,需要设置本地分支与远程分支的链接,可以通过下面这个命令完成:

#设置本地分支与远程分支的链接gitbranch–set-upstreamdevorigin/dev

有时候,我们需要删除没有untracked的文件,可以通过下面这个命令完成:

#删除没有untracked的文件gitclean-d-xf3.7、冲突处理

版本同步的时候,如果大家都修改了同一个文件,难免会发生冲突。

比如,当修改的文件未提交,直接远程拉取代码会发生冲突,改怎么办呢?

可以这样处理

#先将本地修改存储起来gitstash#暂存了本地修改之后,就可以pull了gitpull#还原暂存的内容gitstashpopstash@{0}

此时系统会提示如下类似的信息:

Auto-mergingc/environ.cCONFLICT(content):Mergeconflictinc/environ.c

意思就是系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突。

然后打开冲突的文件,进行修改,修改完毕之后,执行如下命令进行提交!

gitadd.gitcommit-m”注释”gitpush

当然,还可以进行强制更新操作,覆盖本地代码,命令如下!

#下载远程库内容gitfetch–all#不做任何的合并,gitreset会把HEAD指向刚刚下载的最新的版本gitreset–hardorigin/master四、与服务器建立 ssh 连接

git中电脑与电脑之前的连接,支持的模式有两种:HTTP和SSH,其中HTTP的传输会比较慢,才能SSH方式进行互推,效率会非常高!

因此,在实际的使用过程总,推荐使用SSH模式与远程服务器建立连接!

例如与GitHub的连接,具体的操作配置方式如下!

4.1、创建 SSH Key

在当前电脑用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可以直接跳过。

如果没有,打开Shell(Windows下打开Git Bash),创建 SSH Key:

ssh-keygen-trsa-C”youremail@example.com”

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是 SSH Key 的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

4.2、将公钥配置到服务端

登陆 GitHub,打开Account settings,SSH Keys页面:

然后,点Add SSH Key,填上任意Title,在 Key 文本框里粘贴id_rsa.pub文件的内容:

点Add Key,你就应该看到已经添加的 Key !

至此,本地与远程服务器的连接配置已经完成,剩下的就是直接远程服务器拉取代码,然后提交的时候git push就可以了!

五、小结

本文主要围绕GIT的背景和常用的操作命令做了一些介绍,可能有些地方介绍的比较粗陋、不完美,希望老铁们能批评指出!

六、参考

1、廖雪峰 – GIT 教程

-End-

最近有一些小伙伴,让我帮忙找一些面试题资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

好文分享给更多人↓↓

发表评论

登录后才能评论