开篇:git的由来
Linus(林纳斯)是一个伟大的黑客,曾就职于美国加州硅谷的一家科技公司,是Linux系统的创始人,坚持开源精神,竞争对手是微软。
1969年林纳斯出生于芬兰,1982年林纳斯的爷爷童奎(芬兰赫尔辛基大学的统计学教授),为了在家可以完成工作买了一个早期的电脑,但问题是习惯了用纸和笔的童奎很不习惯敲键盘,于是他把目光转向了11岁的外孙林纳斯,童奎在纸上写好代码,有童奎输入进电脑。于是放学回家帮外公输程序成为了林纳斯的“家庭作业”,很快他敲键盘的熟练度超过了外公。久而久之,他觉得仅仅帮外公输入程序有点无聊,开始试着自己编程,并从此对变成上瘾。热爱变成的林纳斯是个不折不扣的直男,上中学时虽然数学成绩超好却不解风情。一直没明白找他补数学的女孩子并让他帮自己养猫是什么意思。
19岁是他考入了爷爷曾任教的大学,选择了计算机专业,那是计算机专业是个冷门专业。当时他深爱的操作系统叫Unix,当时的操作系统功能简单,bug丛生,林纳斯决心编写一个自己的操作系统,他在赫尔辛基一家经营电脑的夫妻店,花了3500美元DIY了一台外观平淡无奇但是性能彪悍的电脑,他付了1200美元,剩下的需要再三年内还清。
1991年9月,正在上大二的林纳斯将Linux系统0.01版本发布,源代码超过1000万行。Linux系统一出现,深受全球黑客的喜爱,经过他们的共同努力,1994年3月14日Linux系统1.0版本在赫尔辛基大学发布。
相比于当时如日中天的Windows,Linux完全免费,并具备图形界面。 鲜明的特色赋予了Linux强大的生命力,使它在Windows开始独霸全球操作系统时,仍能撕开一条口子。
而时至今日:
80%以上的只能手机,均使用基于Linux内核的Android系统。
75%的云计算在Linux系统上运行。
没有Linux系统就没有现在的Google搜索,淘宝购物,微信,QQ聊天等。
在git之前有很多的版本控制工具例如CVS,和SNV,但林纳斯并不喜欢集中式的版本控制工具。虽然那时有些付费的版本控制工具很好用,但不符合林纳斯的开源精神(就像玛丽·居里一样发现了镭这种元素但是并没有当做自己赚钱的工具而是把发现公布与众,简单的说就是免费给别人用),一家出售版本控制系统的公司(BitKeeper)找到了林纳斯授权Linux的开发者可以免费使用,这一消息极大的振奋了Linux的开发者。要知道再次之前世界各地的开发者是使用邮件将代码发给林纳斯,再由林纳斯手动合并。
但Linux社区牛人聚集,一些梁山好汉视图破解这一软件,引起了BitKeeper公司的强烈不满,曾威胁要撤销他们免费使用的权利。小弟烦了事儿,大哥主动帮抗,林纳斯并没有像BitKeeper公司道歉而是闷头花了两周的时间自己用C写了一个分布式版本控制系统,这就是GIT,尤其是2008年,GitHub网站上线了,它为开源项目提供免费存储,无数开源项目开始迁至GitHub。
起步:下载git
git
下载地址:
改变git的UI样式:
找到安装git
的文件夹,进去之后,右击git-bash.exe
选择 以管理员身份运行
。
接着复制粘贴如下命令:
git clone https://github.com/xnng/my-git-bash.git
cd my-git-bash
git clone https://gitee.com/xnng/bash.git
cd bash
接下来,安装字体:
#运行完下边这条命令之后,window电脑会打开两个文件夹,一个文件夹里有很多.ttf文件
#另一个文件夹里只有一个,把仅有的这一个直接拖到另一个有很多文件的文件夹里
start c://Windows//Fonts && start %cd%/fonts
接下来安装主题:
cp .minttyrc ~ && cp git-prompt.sh /etc/profile.d
exit
做完上面的操作之后有的电脑会重启一下gitbash
有的电脑把gitbash
关了之后不再重启,如果电脑没有自动重启gitbash
只需手动打开就可以了。
git指南
创建版本库:
git init
添加操作:
# 添加操作实际上是把文件修改添加到暂存区
# 单独添加某个文件的修改
git add 文件名称
# 添加所有文件的修改使用的是小写的点
git add .
提交操作:
# 提交更改,实际上就是把暂存区的所有内容提交到当前分支会提交所有添加后的文件
git commit -m"本次提交的描述"
查看当前仓库里所有文件的状态:
git status
查看一个文件修改了哪一部分:
git diff 文件名
查看提交历史:
git log
# 要想让日志变得更漂亮、美观,可以试试下方代码
git log --pretty=oneline
回到上一个版本:
# 上一个是HEAD^,回到上上一个是HEAD^^,回退到10个版本以前HEAD~10
git reset --hard HEAD^
回到某个特定的版本:
git reset --hard 版本号
查看所有使用过的命令历史(日志):
git reflog
工作区:
git仓库所在的目录就是工作区
版本库:
.git文件夹就是当前这个git仓库的版本库,这个不是工作区;
里边存了很多东西,其中最重要的是
stage
【暂存区】、git自动创建的第一个分支master
【主分支】、以及指向master
【主分支】的指针HEAD
。
修改了一部分把它添加到了暂存区,但是又对文件进行了一波修改:
# 第一次修改
git add .
# 第二次修改,继续添加
git add .
# 统一提交
git commit -m"描述"
撤销修改:
#让文件回到最近一次添加或提交时的样子
git restore 文件名
撤销已添加到暂存区的修改:
# 撤销单个
git restore --staged 文件名
# 撤销多个
git restore --staged .
删除文件:
# 手动删除一个文件之后,git版本库里依然是有这个文件的,如果要把git版本库里的文件也删除掉,
# 使用git rm命令。比如说我们现在手动删除了一个叫做demo1.html的文件,接着
git rm demo1.html
# 从版本库里删除之后要再进行一次提交
git commit -m"描述"
远程仓库
文中的克隆指的是下载:
git之所以叫做分布式版本控制系统,同一个git仓库,可以分布到不同的电脑上,那么怎么分布呢?最早,肯定只有一台机器有这个版本库,别人可以直接把你的这个版本库复制到自己的电脑里,复制完成之后,每个人都有了一个一样的版本库,这些分布在不同人不同电脑上的版本库并没有主次之分。这样即使某个人的电脑坏了文件丢失了,也可以再克隆一遍。假如说我们有一个git仓库,别人需要克隆,我们不知道有多少个人要克隆,也不知道他们什么时候来克隆这个版本库,因此我们就必须保持电脑24小时开机,而在实际开发中我们一般会把这个git仓库放在一台服务器上,这样无论何时何地只要有网络任何人都可以克隆这个仓库。而
github
就为我们免费提供了一个可以存储git仓库的服务器,我们只需要注册一个github
的账号就可以了。怎么注册呢?
注册github
账号
github网址
: https://github.com/
github
是一个免费的代码托管平台,用户范围遍布全球,我们放在上边的项目别人可以查看和克隆,别人放在上边的项目我们也可以查看和克隆,这样即便是离我们很遥远的牛人,我们也可以把他们公开的项目下载下来玩弄一番。
接着创建SSH Key
我们把项目放到github上托管后,其他人也可以看到和下载,为了防止别人修改我们在远程仓库里的代码,github使用一种加密认证,只有认证通过才可以修改远程仓库里代码。那别人下载我们的代码到自己的电脑上之后可不可以在他的电脑上修改我们的代码呢?这个当然可以,我们无法控制,我们能做的是不让他改我们远程仓库里的代码
ssh-keygen -t rsa -C "你的邮箱地址"
输入完成之后不管他提示什么都一路回车,知到不能回车为止,接着把我们生成的SSH Key
添加到我们自己的github
账号里:
# 首先你要知道自己的sshkey是什么
cat ~/.ssh/id_rsa.pub
把返回的一堆密码复制一下,填在自己github
的设置里(这个密码可以随意给别人看,除非你做的是机密工作,那你不能透露给别人)。
添加上去之后我们现在就可以去修改自己账号里远程仓库里的代码了,但是我们得先有个仓库,现在我们在github
上创建一个远程仓库。
接着我们找到本地的git
仓库,然后把本地的仓库和远程的仓库关联起来:
# 在本地
git remote add origin 远程仓库的地址
现在我们把两个仓库关联了起来,但是远程仓库里并没有我们本地仓库的代码,我们需要把本地的代码推送到远程:
# 在本地
git push origin master
推送完成之后,我们会发现远程里的代码和我们本地的代码一模一样。从现在开始,只要你本地修改代码并提交之后,就可以推送到远程仓库来更新远程仓库里的内容。我们刚才所说的别人无法修改你远程仓库里的代码指的就是他不能把在他本地上修改的部分推到你的远程仓库。
刚才我们说的是如何本地仓库关联远程仓库接下来我们来看看如何把远程仓库上看到的代码克隆到本地:
git clone 仓库地址