Git分布式版本管理系统

Git分布式版本管理系统

CVSSVN集中式版本管理系统

原文:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000 

总结整理如下:

*集中式vs分布式

集中式版本控制系统的版本库是集中存放在中央服务器的,要先从中央服务器取得最新的版本,再用自己的电脑干活,干完活再推送给中央服务器。最大缺点就是必须联网才能工作,若在互联网上,网速慢时可能提交一个10M的文件就需要5分钟。

分布式版本控制系统无“中央服务器”,每个人的电脑上都是一个完整的版本库,只需把各自的修改推送给对方,就可以互相看到对方的修改了。和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,某一个人的电脑坏掉可从其他人那复制。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

*安装Git

官网: https://git-scm.com/downloads 

国内镜像 https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit 

安装后开始菜单找到Git->Git Bash”,弹出类似命令行窗口就说明Git安装成功

$ git config --global user.name "Your Name"

$ git config --global user.email "[email protected]"

*创建版本库repository

版本库即仓库,可理解为一个目录,目录中的所有文件都可以被Git管理起来,每个文件的删除、修改、删除,git都能跟踪,一遍任何时候都可以追踪历史或将来某个时刻可以还原。

1. 先创建一个目录

$ mkdir learngit =>$ cd learngit =>  $ pwd  //用于显示当前目录/Users/michael/learngit

Windows系统避免遇到各种莫名其妙的问题,确保目录名(包括父目录)不包含中文。

2. 通过git init 命令把这个目录变成Git可以管理的仓库

$ git init // Initialized empty Git repository in /Users/michael/learngit/.git/

ls -ah命令可以看到隐藏的.git目录,用来跟踪管理版本库

3. 把文件添加到版本库

版本控制系统只能跟踪文本文件的改动,如TXT文件,网页,所有的程序代码等,告诉每次的改动,而图片、视频这些二进制文件,虽能由版本控制系统管理,但无法跟踪文件的变化,只能把二进制文件每次改动串起来,只知道图片从100KB改成了120KB,不知道具体改了什么。MicrosoftWord是二进制的,版本控制系统无法跟踪其改动,若要真正使用版本控制系统,就要以纯文本方式编写文件。文本是有编码的,若无历史遗留问题,建议使用UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。不要用windows自带的记事本,用Notepad++,把默认编码设置为UTF-8 without BOM

创建文件readme.txt到库目录 => $ git add readme.txt => git commit -m “wrote a readme file” 

*时光穿梭机

git status命令可以让我们时刻掌握仓库当前的状态;

git diffdifference,显示格式是Unix通用的diff格式,后面可跟文件,显示具体修改内容;

git add 修改后还需要add

git log 命令可以由近到远提供之前commit的信息(历史记录),后面可加--pretty=oneline参数可使输出信息每条简洁为一行。

1. 版本回退

git reset : 回退到上一个版本,eg: git reset --hard HEAD^

git reset --hard 3628164(commit id): 指定回到未来某个版本,仅需写版本号前几位即可;

cat 文件: 可以查看文件内容;

git reflog:用来记录每一次命令

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针

2. 工作区和暂存区(其他版本控制系统无暂存区的概念)

工作区Working Directory:即电脑中的一个目录

版本库Repository:工作区中的隐藏目录.git,版本库包括暂存区(stage/index),还有Git自动

创建的第一个分支master,以及指向master的一个指针HEAD

3. 管理修改:git跟踪管理的是修改而非文件

git diff HEAD -- readme.txt命令可以查看工作区和版本库中最新版本的区别

4. 撤销修改

git checkout -- 文件:可以丢弃工作区的修改,--很重要,没有--为切换到另一个分支的命令。

git reset HEAD 文件:把暂存区的修改撤销掉(unstage),重新放回工作区

撤销提交用版本回退

5. 删除文件

若从版本库中删除该文件,用命令git rm删掉,并且git commit

若删错了,版本库里还在,把误删的文件恢复到最新版本用git checkout

*远程仓库

1. 创建SSH Key

ssh-keygen -t rsa -C "[email protected]",回车则会在用户主目录下自动创建.ssh目录,里面有id_rsa(私钥,不可泄露)id_rsa.pub(公钥,可放心告诉别人)两个文件。

2. 登陆GitHub=>settings =>SSHandGPGkeys=>newSSHKey(Key中粘贴id_rsa.pub文件内容)

SSH Key用于GitHub通过公钥识别出你推送的提交确实是你推送的,而非冒充。允许你添加多个Key。假定你有若干电脑,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

添加远程库:本地创建了一个Git仓库后,在GitHub创建一个Git仓库,让这两个仓库进行远程同步,这样,GitHub上的仓库既可作为备份,又可让其他人通过该仓库来协作,一举多得。首先在GitHub上创建一个新仓库,可从这个仓库克隆出新仓库,也可把一个本地仓库与之关联,然后把本地仓库的内容推送到GitHub仓库。

关联:git remote add origin [email protected]:Jane-ZhangJing/learngit.git

推送:git push -u origin master

把当前分支master推送到远程,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

本地提交了,可用命令git push origin master把本地master分支最新修改推送至GitHub

SSH警告:第一次使用Gitclone或者push命令连接GitHub时,会得到一个警告

从远程库克隆:远程库=>git clone [email protected]:Jane-ZhangJing/gitskills.git克隆本地库

*分支管理

分支的作用:既可以保存自己的代码由不影响别人工作。HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。     

1. 创建与合并分支:

git checkout -b dev等同于git branch dev+git checkout dev创建并切换新分支dev

git branch:查看当前分支。

git merge dev:合并指定分支到当前分支,dev中做更改提交后,回到主分支进行分支合并。

git branch -d dev:合并完成后就可以放心地删除dev分支了

2. 解决冲突

你可能感兴趣的:(git)