马上要步入工作(团队开发)的我,是时候做个example学习一下Git与github的使用了。
Git与github使用教程
首先,要知道git和github完全是两回事
git:是一款软件,工具
github:是一个平台网站
关于Git的小故事
Git的作者就是大名鼎鼎的Linus先生,他因为创立了Linux内核而名声大噪,Git的诞生与Linux密不可分。
Linux作为开源操作系统 ,代码需要由全世界来维护,那么首先要解决的就是如何让全世界人去开发一款软件(Linux),这就需要用到分布式管理的概念了。
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
随着Linux代码不断的膨胀,Linus不得不考虑使用管理服务了,当时流行的版本管理工具有SVN,CVS,直至今日他们依然广泛被使用,但众所周知,Linus老人家“强迫症”严重,他坚决反对使用他们,理由是他们是非分布式,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。
当时Linus算是妥协的选择了一款商用的版本管理工具BitKeeper——BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
但是跟着Linus混的大佬们都是什么人?那都是极具黑客色彩的“互联网梁山好汉”,也许是出于刺激感,也许是对商业软件的不满,以开发Samba的Andrew为首的大佬们试图破解BitKeeper的协议,后来东窗事发,被BitMover发现,一怒之下收回Linus社区BitKeeper的使用权。
其实只要Linus一个小小道歉,就可以挽回BitKeeper,然而,他的性格,可能会吗,哼?Linus不仅没有道歉,还怒喷Bitkeeper就是个辣鸡,Linux社区不需要他。
后来的事,Linus花了一个月开发了Git——分布式版本控制工具!仅仅一个月?!大佬不愧是大佬,什么授权,什么商业公司,不存在的!你不给我用的东西,我还不屑什么授权呢,没有就写一个啊!不就是个版本控制工具嘛?很难吗?
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
Git和CVS,SVN最大的区别在于分布式,每一台安装git的电脑都有本地“缓存”版本——镜像,即使没有网络的情况下,代码版本会被保存在本地,一旦连上了远程git服务,立刻同步上去。
Github的后端使用的就是git!而github应该被定义为一个网站——平台。
知乎有一段子是这么解释git和GitHub的关系:
Git好比魔兽争霸,GitHub好比对战平台。
使用前准备
下载git:https://git-scm.com/downloads
安装好后找到git安装目录下的bin目录,将bin配置到PATH环境变量里,打开windows cmd,输入sh,git,bash三个命令,应该都奏效了,输入exit退出去。
进入:https://github.com/
注册登陆好,然后点击右侧新建按钮:
进入新建项目的页面后输入你想要新建项目的相关信息,选择一个协议,一般用MIT的就可以,点击create Repository即可。
这样项目已经在github上生成了。
建立SSH连接
熟悉github的都知道,习惯上我们使用ssh协议连接github来管理我们的项目,这种感觉就是Linux ssh远程控制的阉割版。你只能管理项目,不能控制一台虚拟设备。
打开windows命令行输入git安装后携带的命令:sh
进入了sh界面,这其实就是个linux的bash
创建ssh密钥:
ssh-keygen -t rsa -C "devilyouwei@gmail.com"
接下来终端提示,不停按回车过去就行。
他会提示你密钥保存目录,去找到那个“id_rsa.pub”文件
一般是在用户目录下的ssh目录下。打开后复制全部内容!
注意:这里复制一长串密钥开头应该是ssh-rsa字样
重新进入github网站点击个人头像下拉找到“setting”进入设置界面
点击左侧
点击“new ssh key”按钮
随便输入一个标题,然后粘贴刚刚复制的一长串密钥,并且保存即可!
离开GitHub网站,回到本地操作。
测试连接
打开windows cmd命令行,输入:
ssh -T git@github.com
结果应当如下:
继续配置用户名和邮箱认证:
git config --global user.name "devilyouwei"
git config --global user.email devilyouwei@gmail.com
这里输入的就是GitHub注册的邮箱和用户名,需要同步!
项目管理
在成功连接上GitHub后,项目的管理的功能就很多了,比如:
github 初始化到 本地
我们称本地项目的目录为仓库,现在要把刚刚在GitHub新建的项目同步到本地的仓库来(项目目录为空的情况下)。
首先本机没有项目目录就先创建目录,一般与github创建的项目名相同比较好,cmd下切换到仓库目录下输入命令:
git init
git remote add origin git@github.com:devilyouwei/WallStreet.git
第一行命令origin后面跟着的是项目地址,如何获得,在GitHub点击
这一步是将远程项目源添加到本地,然后初始化git,注意初始化应该在仓库(项目)目录下执行,执行完后目录里多一个隐藏的目录“.git”,不用理会,有了他就能在当前目录为所欲为了!哦不,我是说已经关联好了。
注意:如果发现项目同步错了目录,应该切换到想要同步到的目录下,输入git init,重新pull接下来
第一次从远程同步到本地使用pull:
git pull origin master
现在去看看目录,已经将远程项目文件同步到本地了(一般有个readme.md文件)!
本地 到 github
在项目目录下新建一个index.js文件,随便写点代码进去。
输入:
git status
提示有一个文件没有commit上去,标记为红色,并告诉你用git add把他添加进去。
再次输入:
git add .
git status
绿色表示已经添加可以commit到GitHub上了
输入:
git commit -m "a new index.js for the project"
git push origin master
commit后面跟着的是本次版本更新的描述,然后使用与pull相对的push提交至服务器即可。
查看GitHub项目:
完成本次提交!
撤回commit
# 不还原代码
git reset --soft HEAD^
# 代码也给你还原了!谨慎用
git reset --hard HEAD^
github 更新到 本地
有这么一种场景,开发者在多台电脑上开发同一个项目,或者多人开发不同的模块,例如我在公司写了一些代码,按照上述操作同步到了github上,回到家后由于远程代码版本变了,需要先将远程代码反向同步回家里的电脑上,操作如下:
git remote -v
可以看到origin仓库的fetch和push版本,这里我们使用fetch将远程代码逆向同步到本地,称之为合并到本地或更新到本地
git fetch origin master
比较与本地仓库中代码的区别,我这里两边代码一样,终端并不会输出什么
git log -p master.. origin/master
同步(更新合并)
git merge origin/master
正如之前比较结果所述,两边代码相同,所以提示:“already up to date”。
注:以上所述origin为仓库名,master为分支名。
git 切换分支
想换个分支?
# 不强制
git checkout development
# 强制
git checkout -b development
git 指定ssh
电脑上有多个ssh,连接到了不同平台或账户?
可以对一个项目单独指定ssh的key
git config core.sshCommand "ssh -i ~/.ssh/newsshname -F /dev/null"`
git 指定username和email
多个项目,又多个账户?每个项目用个独立账户?
git config user.name "development"
git config user.email "development@example.com"