分布式版本控制-Git(一)

时间:2023-02-01 06:26:03
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git管理的是修改,而不是文件。

一、集中式&分布式

1. 集中式版本控制系统(CVS),版本库是集中存放在*服务器的,而干活的时候,用的都是自己的电脑,所以要先从*服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给*服务器。*服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
2. 分布式版本控制系统(Git),根本没有“*服务器”,每个人的电脑上都是一个完整的版本库。分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。

二、安装Git

1. msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "ligang"
$ git config --global user.email "381510688@qq.com"
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址

三、创建版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
第一步,如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
$ mkdir learningGit
$ cd learngit
$ pwd
第二步,通过git init命令把这个目录变成Git可以管理的仓库。
$ git init
千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8
如果使用了,可以使用以下命令将DOS格式文本文件转换成UNIX格式:
yum install dos2unix
dos2unix bin/startup.sh

四、文件操作

把文件添加到仓库:$ git add readme.txt
把文件提交到仓库:$ git commit -m "注释" 【-m:后面输入的是本次提交的说明】

查看状态:$ git status
查看修改内容:$ git diff file

查看历史记录:$ git log
查看历史版本号:$ git log --pretty=noeline

回退到上一个版本:$ git reset --hard HEAD^
回退到上上上版本:$ git reset --hard HEAD~3
回退到指定版本:$ git reset --hard 54564494 【54564494为commit id】
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向“你要回退的版本”,然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。
记录你的每一次命令:$ git reflog

五、工作区和暂存区

工作区(Working Directory):就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区
版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
查看工作区和版本库里面最新版本的区别:$ git diff HEAD -- file
撤销修改:git checkout -- file
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退内容,不过前提是没有推送到远程库。
删除文件:
直接在文件管理器中把没用的文件删,或者用rm命令删除
git status命令会立刻告诉你哪些文件被删除了
一是确实要从版本库中删除该文件,那就用删掉命令git rm file,并且git commit
另一种情况是删错了,可把误删的文件恢复到最新版本:$ git checkout -- file

六、远程仓库

第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keyen -t -rsa -C "381510688@qq.com"
第二步:登录GitHub,打开"settings",“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,id_rsa是私钥,id_rsa.pub是公钥。
第三步:添加远程库(本地-->远程)
1. 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。如learningGit
2. 在本地的learningGit仓库下运行命令
 $ git remote add origin git@github.com:381510688/learningGit.git
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
3. 把本地库的所有内容推送到远程库上,实际上是把当前分支master推送到远程。
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来。
    之后可以使用简化命令:
$ git push origin master
第三步:添加远程库(远程-->本地)
$ git clone git@github.com:381510688/learningGit.git
$ git clone https://github.com/381510688/learningGit.git