一、介绍
版本控制: 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
git 就是一个分布式版本控制系统
分布式版本控制,没有中央服务器的概念,每个人都有自己的版本库,因此每个人在工作时候,不需要联网,版本库本地即可管理。
既然每个人都是一个完整的版本库,同事之间如果需要协作开发,就需要找一个用于“交换文件”的中央服务器,这个服务器不存在也不影响大家干活,只是用于交换文件内容。
二、安装与配置
Linux安装git:
三种安装方式--
1.yum安装
2.源代码编译安装
3.rpm包手动安装
这里用yum安装git:
1.配置阿里云的yum源,因为它下载快,下载软件包齐全
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.一条命令安装git软件
yum install git -y
3.安装git完毕,查看版本
[root@fd yum.repos.d]# git --version
git version 1.8.3.1
4.设置git的版本控制用户信息
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
# 用这个命令就会在 ~/.gitconfig文件配置, 只对当前用户配置(一般用这个)
# 如果用--system就是对操作系统所有的用户,都设置这个配置
# git config --system user.name "xxxx"
5.查看全局版本用户信息
git config --global --list
运行git前的配置
既然已经在系统上安装了 Git,你会想要做几件事来定制你的 Git 环境。 每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。
Git 自带一个 git config
的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
这个用户指的是linux用户
-
/etc/gitconfig
文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有--system
选项的git config
时,它会从此文件读写配置变量。 -
~/.gitconfig
或~/.config/git/config
文件:只针对当前用户。 可以传递--global
选项让 Git 读写此文件。 -
当前使用仓库的 Git 目录中的
config
文件(就是.git/config
):针对该仓库。 --local 当前仓库配置
用户信息
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
git config --global user.name "John Doe" git config --global user.email johndoe@example.com
git配置相关命令
yum install git -y 安装git git --version 查看git版本 git config --system --list 查看系统所有linux用户的通用配置,此命令检查/etc/gitconfig git config --global --list 查看当前linux用户的配置,检查~/.gitconfig文件 git config --local --list 查看git目录中的仓库配置文件,.git/config文件 git config --global user.name "pyyu" 配置当前linux用户全局用户名,这台机器所有git仓库都会用这个配置 git config --global user.email "yc_uuu@163.com" 配置当前linux用户全局邮箱 git config --global color.ui true 配置git语法高亮显示 git config --list 列出git能找到的所有配置,从不同的文件中读取所有结果 git config user.name 列出git某一项配置 git help 获取git帮助 man git man手册 git help config 获取config命令的手册
三、git的使用生命周期
使用git就是将本地文件(工作目录workspace)的文件,添加到暂存区(stage),然后提交到本地仓库(repository),最终可以协同开发,推送到远程仓库(remote)
工作目录(当前linux操作的目录) > 暂存区 > 本地仓库 > 远程github
git操作一,建立git仓库
git版本库,也叫做git仓库(repository),也就是一个文件夹。
这个目录的所有内容被git软件管理,所有的修改,删除,git都会跟踪记录,便于可以跟踪历史记录,以后可以还原文件。
git的命令,就是将文件变化,在这四个区域,来回变动
两种场景需求:
1.把已有的项目代码,纳入git管理
cd mysite mysite项目所在代码
git init 初始化git仓库
git status 查看git状态,查看git工作目录的文件,处于生命周期的哪一个状态 注意,只能在git工作目录中输入这个命令,他会去找.git文件夹
git init命令会创建一个.git隐藏子目录,这个目录包含初始化git仓库所有的核心文件。 此步仅仅是初始化,此时项目里的代码还没有被git跟踪,
因此还需要git add对项目文件跟踪,然后git commit提交到本地仓库
想知道.git文件做了什么事,请看git原理 >Git 内部原理
2.新建一个项目,直接用git管理
cd 某个文件夹
git init mysite 此步会在当前路径创建mysite文件夹,mysite文件夹中包含了.git的初始化文件夹,所有配置
那么.git文件夹中有什么呢
[root@pyyuc ~/git_learning/mysite 11:08:19]#tree .git .git ├── branches ├── config 这个项目独有的配置 ├── description ├── HEAD head文件指示目前被检出的分支 ├── hooks hooks目录包含服务端和客户端的钩子脚本 hook scripts │ ├── applypatch-msg.sample │ ├── commit-msg.sample │ ├── post-update.sample │ ├── pre-applypatch.sample │ ├── pre-commit.sample │ ├── prepare-commit-msg.sample │ ├── pre-push.sample │ ├── pre-rebase.sample │ └── update.sample ├── index index文件保存暂存区的信息,只有git add之后才会生成,默认还没有这个文件 ├── info info目录是全局性排除文件,用于放置不想被记录在.gitignore文件中的忽略模式(ignored patterns) │ └── exclude ├── objects 存储所有数据内容 │ ├── info │ └── pack └── refs refs目录存储指向数据(分支)的提交对象的指针 ├── heads └── tags .git文件夹解析
3.获取远程仓库代码
如果你想获取github上的代码,或者你公司gitlab私有仓库的代码,可以使用git clone命令,下载克隆远程仓库的代码。
git clone https://github.com/django/django.git
你会发现所有的项目文件都在这里,等待后续开发。
git操作二、记录更新到本地仓库
还记得git的四个区域吗?本地文件夹,暂存区,本地仓库,远程仓库吗?
本地文件夹未初始化,git是不认识的
本地文件git init后,就成了git仓库
请记住,在工作文件夹的每一个文件,只有两种状态,一个是未跟踪,一个是已跟踪
已跟踪指的是已经被纳入git版本管理的文件,在git快照中有他的记录
未跟踪是这个文件既不在git快照中,也不在暂存区
git init初始化时的工作文件夹,都属于已跟踪了,后续的编辑操作都会标记为,已修改文件,因此需要将修改后的文件,加入暂存区,然后提交暂存区的文件。
3.git项目的第一次管理,初始化的流程演练
1.git init 对django代码初始化 2.git status 查看git版本库的状态 3.对django代码,进行跟踪,标记 ,然后提交本地工作区的代码,到暂存区 git add . 4.提交暂存区的代码,到本地版本库 git commit -m "写入你的提交备注信息" # -m 是标记注释的意思 5.查看git提交日志 git log 6.git的各种命令,就是对四个区域来回切换,并且只能在git工作区下去敲 必须得在含有.git文件夹的目录,去敲命令,才可以 7.在git版本库目录下,新创建的文件,都会被标记为 Untracked files,代表未跟踪的文件 8.对新创建的文件,进行跟踪 git add . 9.修改django的url.py,写入新功能,也是对文件进行修改标记 modified 对修改过的代码文件,也必须git add 添加到暂存区 git add . 10.任何的对项目修改的操作,注意都要git status看一下 11.查看git提交日志 git log 12.git回退历史 语法: git reset --hard commit的id记录 --hard参数是强制性回退 git reset --hard 954e6df1c0a2a71dd141850727d3eddd580518b3 再次回到另一个提交版本信息, git reset --hard 2444fd8ed876eab2a95a697d039916510b356104 13.git穿梭未来 git 回退,前进版本,其实就是是对git的文件指针,来回切换 文件指针叫做head git reflog #查看所有回退历史记录的命令 14.撤回git修改的记录 对已经跟踪的文件app01/views.py进行修改,此时标记为了modified: app01/views.py 如果你想提交本次修改动作 git add . 如果你发现代码修改错了,git可以很方便的撤回 git checkout -- 文件名 git checkout -- app01/views.py 15.理解git命令 git init 初始化一个git版本库,会生成一个.git 文件夹,此时这个目录就是git仓库了!!! 16.修改git工作区的文件,重命名,以及删除文件 linux的命令如下 rm 删除 mv 移动目录,或者重命名 但是,你对git仓库中的代码,请使用git的命令 git rm 删除git管理的代码 git mv 对git管理的代码,改名 17.git临时区的概念 使用场景: git add 作用是? 是把本地工作区的代码,提交到暂存区 git commit 将暂存区的代码,提交到本地版本仓库中,提交完毕,这件事就结束了 使用流程,场景,在你开发新功能的时候,突然线上代码有问题,你必须得改线上代码, 将你目前已经开发好的功能,临时存储起来, 待你修复bug完毕之后,再把这个临时存储的代码,回退回来即可 : 1.git stash #将你暂存区提交的代码,放到一个stash临时区中 2.修复bug完毕 3.拿回stash的代码 git stash pop 4.查看stash是否还有临时代码 git stash list 5.注意未标记的,已修改的文件,都得git add 添加到暂存区之后,才可以提交到本地仓库 git add . 6.如果你想提交这个代码 git commit -m "提交注释信息" 18.git分支功能,每个人都有自己的分支,不直接影响本体代码,在自己的分支上,写完代码后,通过管理员吧分支的代码,合并到主干上即可 git branch #查看当前所在的分支 git branch wupeiqi #创建吴佩琪分支 git branch alex #创建艾利克斯分支 git checkout wupeiqi #切换到吴佩琪分支 分支开发使用流程 1.创建新的分支 git branch wupeiqi 2.切换分支 git checkout wupeiqi 3.在分支下,写自己的代码 ........ 4.切换到主干分支上 git checkout master 5.合并分支的代码,此时吴佩琪开发提交的代码,就被合并到master了 git merge wupeiqi 分支冲突怎么办?手动解决冲突的代码即可 思路:master分支和wupeiqi分支,同时操作一个文件,对同一行代码进行写入 1.用master主干分支,操作一个文件,并且提交commit git branch #当前是主干master 模拟对一个文件的第二行写入代码 2.master提交本次修改记录 git add . git commit -m "提交注释" 3.切换分支,也对同一个文件,进行写入代码,且提交 git checkout wupeiqi 模拟对同一个文件,写入同一行代码,肯定会和master冲突 git add . git commit -m "分支提交的注释" 4.回到master主分支,合并吴佩琪分支,然后手动解决 git checkout master git merge wupeiqi 如果出现了冲突,就手动编辑这个文件,删除git自动添加的冲突注释 5.保存文件退出 git add . git commit -m "master最终合并的注释" 6.git分支的命令 git branch 分支名linux 创建分支linux git checkout 分支名linux 切换分支到linux git branch 查看当前分支情况,在哪一个就有*符 git check -- filename 一键还原文件,将git仓库的文件覆盖当前文件,危险命令 git checkout -b name 创建+切换新的分支
git >>>幕布链接