Git
分布式版本控制系统Git与集中式的版本控制如SVN
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
分布式的版本控制就是每个人都可以创建一个独立的代码仓库用于管理,各种版本控制的操作都可以在本地完成。每个人修改的代码都可以推送合并到另外一个代码仓库中。
而像SVN这样,只有一个*控制,所有的开发人员都必须依赖于这个代码仓库。每次版本控制的操作也必须链接到服务器才能完成。
《
集中式版本控制系统,版本库是集中存放在*服务器的,而干活的时候,用的都是自己的电脑,所以要先从*服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给*服务器。*服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工作
那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“*服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的*服务器要是出了问题,所有人都没法干活了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“*服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
》
很多公司喜欢用集中式的版本控制是为了更好的控制代码。如果个人开发,就可以选择Git这种分布式的。
在SVN上不可以多建几个代码仓库吗? 答:SVN是建立在远程服务器上的
版本控制系统
有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。
如果要真正使用版本控制系统,就要以纯文本方式编写文件。
git:git add readme.txt报错 pathspec 'readme.txt' did not match any files
说明在本地目录里没有这个文件。
解决办法
1.手动创建一个文件
2.通过git命令创建touch readme.txt
开始的报错只是文件命名问题,注意在文件命名的时候要加后缀(.XXX)
基本操作语句:
初始化一个Git仓库:git init
添加文件到Git仓库:
1:git add 文件,可以添加多次; 2:git commit -m '说明注释'。(作用可以看到自己每次的版本具体修改情况)
git status
命令可以让我们时刻掌握仓库当前的状态
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式
-
要随时掌握工作区的状态,使用
git status
命令。 -
如果
git status
告诉你有文件被修改过,用git diff
可以查看修改内容。
再次使用已经建立的git库
命令:cd learngit(其中learngit为版本库名字)
每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit
。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
git log
命令显示从最近到最远的提交日志
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
$ git log --pretty=oneline
回退到上一个版本 <<同时修改本地文件
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交1094adb...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL
的commit id
是1094adb...
,于是就可以指定回到未来的某个版本:
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
版本号没必要写全,前几位《至少四位》就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
关闭电脑后的回溯方法
Git提供了一个命令git reflog
用来记录你的每一次命令(所有的)
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
工作区和暂存区
先创建远程库,然后,从远程库克隆。
上一篇: 『Data Science』R语言学习笔记,观察数据
下一篇: data science学习笔记1
推荐阅读
-
C#/.NET使用git命令行来操作git仓库的方法示例
-
.NET Corek中Git的常用命令及实战演练
-
Android studio怎么使用git获取最新内容然后合并?
-
通过pycharm使用git的步骤(图文详解)
-
Android studio使用git代码追溯到上个文件的教程?
-
Eclipse中本地的git工程怎么导入?
-
解决eclipse中egit中的cannot open git-upload-pack问题
-
Android studio项目怎么使用git版本返回到上个版本?
-
Android studio怎么使用git? 使用git查看本地与远程仓库文件的教程
-
Android studio创建远程切换分支git的详细教程