Git教程
01 初步了解给Git
-
版本控制系统分为分布式版本控制系统和中央版本控制系统。分布式版本控制系统每一个节点都是独立的系统,中央版本控制系统是典型的C/S架构:
-
从存储空间来说Git比SVN更加占用空间,因为Git在每个端都保留了所有的版本历史,而SVN只在服务器中保存了历史版本记录,在客户端是没有保存本地版本历史的;
-
Git在流行程度、功能丰富方面比 SVN 有优势,在学习难度上, SVN 更占据优势。
02 Git环境的配置
安装Git
- Windows安装给Git 下载地址:https://git-scm.com/download/win ,一直点击Next安装即可,安装好在电脑桌面点击鼠标右键点击Git bash Here菜单之后,可以看到一个终端窗口,在终端里面输入命令git —version查看Git的版本
- Mac版本Git下载地址:https://git-scm.com/download/mac 安装教程和Win的大体相同
- Linux系统
ubuntu 系统的安装命令如下:
apt install git
Centos 系统安装命令如下:
yum -y install git
安装完成之后,打开终端,在终端当中输入git —version,如果可以看到 Git 的版本号,说明已经成功安装:
03 认识.git
3.1 创建版本库
我们首先创建文件夹test,这个文件夹用于版本管理的根目录。如果在 Windows 下我们也可以单击鼠标右键,在菜单中选择新建文件夹,然后把文件夹名字改为test就可以了。如果在 Linux 或者 Mac 系统下,可以通过命令mkdir创建文件夹,参考命令如下:
mkdir test && cd test
接下来不管什么系统,都打开终端,并在终端中通过cd命令的方式进入文件夹,然后就可以使用git init命令初始化一个仓库了,参考执行命令如下:
git init
执行命令之后,Git 会进行一系列的初始化操作,当你看到Initialized empty Git repository in /Users/song/test/.git/提示,说明已经成功创建一个版本库
3.1.1 认识.git
在生成的.git目录中,里面包含了整个版本库的信息,我们可以通过命令·cd .git && ls -al
进入 .git 文件夹中查看具体有哪些文件:
➜ .git git:(master) ls -al
total 24
drwxr-xr-x 10 song staff 320 6 25 22:11 .
drwxr-xr-x 3 song staff 96 6 25 22:11 ..
-rw-r--r-- 1 song staff 23 6 25 22:11 HEAD
drwxr-xr-x 2 song staff 64 6 25 22:11 branches
-rw-r--r-- 1 song staff 137 6 25 22:11 config
-rw-r--r-- 1 song staff 73 6 25 22:11 description
drwxr-xr-x 13 song staff 416 6 25 22:11 hooks
drwxr-xr-x 3 song staff 96 6 25 22:11 info
drwxr-xr-x 4 song staff 128 6 25 22:11 objects
drwxr-xr-x 4 song staff 128 6 25 22:11 refs
这些文件夹的作用:
-
HEAD 文件指示目前被检出的分支
-
branches 新版本已经废弃无须理会
-
description用来显示对仓库的描述信息
-
config 文件包含项目特有的配置选项
-
info 目录包含一个全局性排除文件
-
hooks 目录包含客户端或服务端的钩子脚本
-
index 文件保存暂存区信息
-
objects 目录存储所有数据内容
-
refs 目录存储分支的提交对象的指针
3.2基础配置
在建立完项目的版本库之后,后续对代码的管理操作都会要求要有一个身份,所以需要你在管理操作之前,配置一个昵称和邮箱,这个昵称和邮箱仅仅是在查看改动记录时候用的。
3.2.1 查看配置信息
在设置昵称和邮箱之前,可以先检查一下之前有没有配置过昵称和邮箱
查看昵称的命令如下:
git config user.name
查看邮箱的命令如下:
git config user.email
3.2.2 设置配置信息
如果执行上面的命令没有返回相应的昵称和邮箱,说明你还没有配置昵称和邮箱。那么就需要进行配置
配置昵称的命令参考如下:
git config --global user.name “你的昵称”
配置邮箱的命令参考如下:
git config --global user.email “你的邮箱”
3.2.3 修改配置信息
在配置中如果不小心配置错了,或者后面想修改配置的时候,是不能通过重复执行上面的设置昵称命令,来修改昵称的,邮箱修改同理。如果你多次设置昵称,它会在命令执行后提示你无法重复配置或者可能不给你提示,但是这种情况会导致一个 key 配置了多个 value 的问题。
不过,修改的时候,可以通过特定的方式去修改,这里我介绍两种方法, 第一种是通过命令行,第二种是通过修改配置文件。
命令行修改配置
通过命令行修改的方式比较简单,直接执行以下的命令即可
修改昵称参考命令如下:
git config --global --replace-all user.name “your user name”
修改邮箱地址参考命令如下:
git config --global --replace-all user.email"your user email"
修改配置文件
修改文件的方式,主要是修改位于主目录下.gitconfig 文件。在 Linux 和
- Mac 中,可以通过 vim 命令进行直接编辑,比如vim ~/.gitconfig ;
- Windows 系统同样位于用户主目录下,假设你当前的用户是administrator,那么对应的配置文件的路径应该是 C:\Users\administrator.gitconfig,可以直接使用记事本修改里边的 name 或者 email。
如果之前已经配置过昵称和邮箱的情况下,当使用 vim 或者记事本打开配置文件之后,可以看到如下配置:
[user]
name = daxia
email =xxxxx@qq.com
在如果有重复的 name 或 email,可以将其删掉,只剩下一个就好。修改完,通过 git bash 输入 git config –list可以查看是否修改成功了。
04 拉取远端代码:使用Git命令下载远程仓库到本地
4.1.1 首次拉取
HTTP 协议首次拉取代码的命令格式如下所示:
git clone 版本库地址 [本地文件夹名称]
参考命令如下所示:
git clone https://gitee.com/songboy/test201907.git httptest
更新代码
假设远程代码有变更,你想把本地代码更新时,可以在本地的版本库目录下通过git pull命令更新,不需要再指定远程地址,参考命令如下
git pull
命令执行完成后,会要求你输入用户名和密码,只有当你输入正确的用户名和密码之后代码才能正常拉取。
在使用git在clone项目的时候出现了让输入用户名和密码,然而密码输入错误导致项目clone不下来.
Windows的解决办法:找到在控制面板\用户帐户\凭据管理器\windows凭据\ 里面删除原来的密码,删除后就可以重新输入密码了
4.1.2 记住密码
如果你不想每次都输入 git 的认证信息,可以设置缓存认证数据,默认记住
- 15 分钟命令所示:
git config –-global credential.helper cache 1
- 小时的命令:
git config credential.helper ‘cache –timeout=3600’
- 永久记住密码:
git config --global credential.helper store
4.2.1 SSH拉取
现在我们再来看看SSH方式,相比HTTP(S)来说更加安全,因为SSH方式使用的是非对称加密,采用公钥与私钥的方式,不过相对来说配置起来会麻烦一些;好处是一次配置之后,后续不需要每次都进行认证,也更加安全。
ssh 方式首次拉取代码的命令没有什么变化,相比来说只是远程地址有变化,如下命令所示
4.2.2 创建一个ssh key
通过 ssh 协议拉取代码首先要保证当前用户的主目录存在一个.ssh的文件夹,并且里面已经存在私钥文件,如果没有的话我们可以通过ssh-keygen,生成一份公钥与私钥,如下命令所示:
➜ ~ ssh-keygen
在执行命令的交互中,可以直接回车使用默认选项,最终会在当前用户目录下生成公钥和私钥,查看生成的公钥的命令为cat ~/.ssh/id_rsa.pub,在返回的信息中可以看到类似如下信息:
cat ~/.ssh/id_rsa.pub
4.2.3 添加公钥到服务器
当确认公钥和私钥生成完毕之后,我们还需要将公钥放到远程的 git 仓库中去,在码云的版本库中,右上角有一个管理,在管理页面的左侧菜单中有一个添加公钥的选项,将公钥内容复制进去
5.1 同步远程代码
一个远程仓库有可能有多人有权限推送,所以存在远程代码比你本地仓库更新,因此在提交代码之前需要先拉取服务器代码,让本地仓库保持最新的版本记录;这样做的目的是为了防止当你提交代码之后,推送到远端出现代码冲突问题,拉取远程代码参考命令如下所示:
git pull
通过git status命令检查一下有哪些文件被改动了,参考命令如下所示:
git status
状态:
- Untracked: 未跟踪,一般为新增文件,此文件在文件夹中,
- 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作.
- deleted: 文件已删除,本地删除,服务器上还没有删除.
- renamed:文件名称被改变
git checkout 文件名来撤销更改,参考命令如下:
git checkout README.md
5.2 把文件添加到缓存
提交指定文件或目录至缓存的格式,参考命令如下:
git add index.php
5.3 提交代码
当你将所需要提交的代码都添加到缓存区域后,接下来就可以将代码提交到本地仓库中,参考命令如下所示 :
git commit . -m “这是备注信息”
5.4 推送代码
当代码提交之后,在本地的工作就已经完成了,此时为了让其他人拉取你的代码,通常还需要将代码推送到远程仓库,参考命令如下:
git push