我给我讲GIT,并成功把我得罪了
工作中如何使用GIT开发项目?注意:如果你熟悉Linux操作系统,那么这篇文章阅读速度会加倍
另外:如果你熟悉SVN,那么Git只是一个更高级的版本管理工具而已
But:如果你不熟悉Linux,也不知道SVN,那么没关系,至少你使用过云盘来管理你日常的文件。
如果你连云盘都没用过。那么你还是早点回火星吧,地球很危险的。
为啥需要版本管理?假设:
下周就要做年终工作汇报了,你打算今天把PPT做完。
反反复复用了一上午的时间,总算是完成了一半。
中午吃饭的时候,你依然在思考后半部分该怎么完成。
然后你突然间觉得,上午的方案有些问题,还需要再改一改下午5点20分.....
在你反复阅读自己的方案后, 仍然觉得,还是上午的方案更好
可这个时候麻烦来了 , 上午的方案早就被改的面目全非了
当时写的话术,使用的图片动画等等,都已经被你删除了
想用Ctrl + Z解决? 可惜PPT最多只支持150次操作回退,默认设置好像只有80次
这个时候,是不是特别想来一瓶后悔药?
朋友,是时候了解一下X度云盘会员了。 不要998! 不要998! ,只要96元,就可享受包年服务
好了,刚才是个玩笑 , 但百度云盘真的有记录文件版本的功能
因此,我们认为,一个好用的云盘软件,应该具备以下几个功能:
1、用户A和B之间能够方便的进行文件共享
2、用户A和B可以修改同一个文件,云盘能够及时解决冲突问题
3、用户A对文件的修改提交后会同步给用户B
4、所有用户对文件的每一次提交都会有记录保存,操作失误时,可以还原之前的版本
版本管理, 不正是因此而得名么?
SVN的优势在使用git之前,你必须了解一下SVN说起来,SVN可是曾经风靡全球的版本管理工具
SVN软件的使用,确实非常简单
它有两个安装包
第二个安装包是服务器端,也就是说,你可以通过安装这个服务器端的软件,很轻易的在公司内部搭建一个SVN服务器
这样大家就可以在公司内网进行文件或是 代码的共享了
程序员在写代码时,经常需要协同开发(多个人维护一个项目)
SVN带来的方便,自然不言而喻,几乎所有的主流开发工具,都会配有SVN的插件
SVN的具体用法,这里不再详细描述。请读者自行百度
有了SVN,为什么会出现Git?git这个软件的作者,是大名鼎鼎的Linus(Linux系统内核的发明人,编程界神话级的程序员)
不得不说,git这个软件,在易用性上,跟SVN差了不是一个数量级
但毕竟是专门给程序员用的,谁还考虑用户体验??
由于linus严重的个人兴趣倾向,他非常不喜欢文件集中式的管理
于是git软件打一开始就是分布式的
简单的说:就是任何人都可以向任何人的电脑上提交代码,任何人也可以从任何人的电脑上下载代码,任何人都可以被看作服务器端
再加上linus这种崇尚命令行主导一切的思维,git这个软件,打一开始就没有图形界面
所以使用git的时候,特别有种当黑客的感觉,有木有?
尽管,git率先发明了分支的设计,但是,这糟糕的用户体验,并没能使它在全球范围迅速流行起来,直到 github的出现.....
git和github是啥关系?github, 这个被大家戏称为全球最大的同性交友网站
它是如何崛起的呢?
github网站提供了如下的服务:
1、你可以到这个网站注册一个账号2、通过这个账号,你可以建立自己的仓库3、使用你本地的git软件将你的代码提交到github服务器4、如果你的同事也注册了github账号,那你可以一键转载分享给他5、github上面的项目都是可以公开分享给其他人看的6、我们不提供交友,只能提供代码分享及管理你可以看到,github给我们带来了两个巨大的好处
第一 github让我们似乎又回到了SVN的服务器时代,方便。
第二 全世界所有知名的开源代码,都提交到了github上面并公开,这样一来,所有人都可以向这个开源项目提交自己的修改建议
它带动了git软件的流行,这就是今天你不得不学git的原因
git到底咋用?首先,下个一个git软件 ,并安装
在github上,建立一个空的project
建好项目后,会看到项目的地址
现在,把项目的下载地址复制好了
找到一个合适的目录,例如E盘,在该目录下点击右键选择git bash here
输入命令 git clone
项目就会自动下载,这时E盘会多出一个teach目录
好了,你现在可以打开你的开发工具,到这个目录下,编写你的代码了
项目写完了,咋提交呢?在命令行使用cd teach,进入teach目录
输入命令: git add -A , 将所有文件添加至缓存区,准备提交
然后,输入git commit -m '这里可以做一些描述,本次做了哪些修改'
提交成功!
可能还需要一些准备工作如果你第一次使用git,提交时,系统会提示你先设置用户信息,那我们就设置一下:
注意:如果你熟悉Linux操作系统,那么这篇文章阅读速度会加倍另外:如果你熟悉SVN,那么Git只是一个更高级的版本管理工具而已But:如果你不熟悉Linux,也不知道SVN,那么没关系,至少你使用过云盘来管理你日常的文件。如果你连云盘都没用过。那么你还是早点回火星吧,地球很危险的。另外,由于项目通常是多人开发,你必须建立一个自己的分支
我知道你一定想问, 啥是分支? 。。。。。这个说来有点话长了
假设张三和李四要共同开发一个项目
虽然,他们俩负责的是不同的模块
但是,张三的模块如果出了BUG或者错误,会导致李四的项目也无法启动
为了避免冲突和互相干扰
张三和李四在开发之前,都把项目进行了一次克隆拷贝
接下来,他们分别在自己克隆的副本上进行修改和提交
接下来,张三就可以在自己的副本上进行修改和提交,和李四不会产生任何冲突
这就是分支的概念了
当然,张三的所有操作都是在自己的电脑本地进行的
如果本地电脑出了问题,本地记录的版本依然会全部丢失
所以,张三可以把自己本地的全部版本都推送到远程github服务器上
同样,李四也可以把自己本地的全部版本都推送到远程github服务器上
这时,我们查看github远程,会发现变成了这样:
这样一来,我们不仅把所有人的版本做了记录,而且整个开发过程中,张三和李四没有任何交集,也不会产生任何冲突
怎么样?有没有感觉这个分支的发明特别的帅气?
尽管SVN后来也迅速的推出了分支的功能,但它没有一个像github这么流行并统一的服务器。
github不仅提供了代码的托管,现在已经演变成了全球最大的代码分享社区
并在2018年6月份,以75亿美元的价格,卖给了微软
留给SVN的,只有一首《凉凉》
了解了基本原理,还是得学学具体如何使用第一个我: 哎, 在工作中如何使用GIT开发项目?
第二个我: 你就不会说个hello,你好吗?或者,请问~之类的话吗?
第一个我: 我发现你事儿挺多的!
第二个我: 请 ~ 把你的问题具体化好吗?
第一个我: 那,这位(伪)大神,进入公司后怎么把gibhub上新建的项目down下来?
第二个我: 请不要称呼我大神,我只是比你强很多,虽然我也有那么一瞬间觉得自己确实是个大神
第一个我: 是哪些瞬间让你误会了自己呢?
第二个我: 喝醉的瞬间,清醒过来就好了! 好了回答你的问题,
如果你还有这样的疑问,显然你没有好好听课,因为上面已经讲过了。
算了,再说一次,下不为例。git clone
第一个我: 怎么在本地克隆一个副本,也就是创建一个分支?
第二个我: 使用branch命令。git branch yintao01
第一个我: 怎么进入这个分支呢?
第二个我: git checkout yintao01
好了,你现在应该能很明显的看到,你已经切换到了自己的分支,接下来的所有操作,都在这个副本上进行。
第一个我: 写了一部分功能,想保存一个版本,怎么做?
第二个我: 第一步,git add -A, 所有文件提交到缓存区
第一个我: 等等! 我有些文件不想提交,例如 node_modules文件夹,怎么忽略它?
第二个我: 你要在项目的根目录下,创建一个叫做.gitignore的文件,内容如下:
第一个我: 可是我刚才已经把不需要的文件提交到缓存区了,怎么撤销?
第二个我: 很简单,重置一下,git reset,然后就可以提交了。
第一个我: 等等!我想在正式提交之前,先查看一下,都有哪些文件提交到了缓存区?
第二个我: 你TM事儿真多!好吧,你可以使用git status命令查看,都做了哪些改动,以及所有文件的状态。
第一个我: 好了,那正式提交是不是commit命令?
第二个我: 没错!使用git commit -m '这里一定要把做了什么修改写清楚'
第一个我:每次提交一个版本都得写啊? 那多麻烦? 不写清楚行吗?
第二个我: 你可以试试,把你肠子悔青。
第一个我:刚提交完,就后悔了,感觉提交错了,想撤销这次提交,或覆盖这次提交,怎么做?
第二个我: 版本管理的好处,就是允许你后悔,首先你把错误的内容先修复好
然后再次add添加缓存,但这次提交时,注意使用git commit --amend -m '刚才的提交就覆盖了'
第一个我:我想直接还原到上一个版本,怎么做?
第二个我: 使用git reset head^
第一个我: 我想直接还原到前两个版本,怎么做?
第二个我: 使用git reset head^^
第一个我:那还原到前N个版本呢?
第二个我: git reset head^^^^^^^^^^...
第一个我: 你逗我呢? 这么麻烦?
第二个我: 没开玩笑,就是这样,当然你可以指定版本号直接还原
git reset --hard 7e2ec0f51e9ae2e7cbc7c4deca18b77b242148d6
第一个我: 版本号是个哈希值? 这么长咋记得住?
第二个我: 你可以用git log查看所有版本
第一个我: 我查了,可是每个版本都改了什么看不到啊,这aaaaa,bbbb,cccc,dddd都是什么鬼?
第二个我: 这不都是你自己提交时写的注释么? 不认真写注释的下场就是这样。活该。
另外,任何时候写代码,一定要想清楚了,测试通过了再提交,这是程序员的基本素质。
回滚操作虽然好用,但它不应该成为你的日常命令。如果一个程序员把各种回滚操作用的特别熟
通常表明他的代码水平不怎么样。
第一个我: 我看你用的就挺熟的呀
第二个我: 滚~~~~~~
第一个我: 如果本地我已经测试完并提交了,怎么推送到远程github上面?
第一个我: 为了方便做远程推送,通常我们会给远程仓库地址做个快捷方式。
git remote add miaodong
这个miaodong就是快捷名称,接下来你提交时,就可以这样写:
git push -u miaodong yintao01 这句话的意思就是把yintao01这个分支推送到miaodong这个仓库地址
-u 的意思就是把yintao01设为默认分支
下次再推送,就可以直接写git push miaodong
第一个我:我的模块已经开发完成,并测试通过,也推送到了github上,怎么把我的分支合并回主分支
第二个我: 在github上合并分支非常简单,找到Pull request,自己看说明去吧
第一个我:就这?我都会!
第二个我: 有种你别跑!!!
至此,我成功的把我得罪了。你成功的掌握了日常工作中git的基本使用
我来回答