Git理论、原理、操作
- Git简介:
一个开源的分布式版本控制系统。用于处理任何大大小小的项目,是一个开放源码的版本控制软件。 - Git与SVG的区别:
1、git是分布式的
2、git把内容按元数据方式存储,svg按文件
3、git分支和svg分支不同。svg中就只是版本库的另外一个目录
4、git没有全局的版本号,svg有
5、git的内容完整性要优于svg - Git安装:
1、Linux:
2、Window:
安装包下载地址:https://gitforwindows.org/
3、Mac
下载地址为:http://sourceforge.net/projects/git-osx-installer/ - Git使用前常用配置:
1、 配置个人的用户名称和电子邮件地址:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
2、文本编辑器:
git config --global core.editor emacs
3、差异分析工具:
$ git config --global merge.tool vimdiff
4、查看配置信息: git config --list
$ git config --list也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可
$ git config user.name
name
- Git工作流程:
一般工作流程如下:
1、克隆 Git 资源作为工作目录。
2、在克隆的资源上添加或修改文件。
3、如果其他人修改了,你可以更新资源。
4、在提交前查看修改。
5、提交修改。
6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。 - Git工作区、暂存区、版本库:
概念:
工作区:个人电脑里的项目目录
暂存区index:又叫索引,一般存放在“.git目录下”
版本库master:工作区有一个隐藏目录.git
三者间关系:
- Git创建仓库:
1、git init
git init //使用当前目录作为Git仓库, 执行完后会在当前目录生成一个 .git 目录。
git init newrepo // 初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'
以上命令将目录下以 .c 结尾及 README 文件提交到仓库中
2、git clone:从现有 Git 仓库中拷贝项目
git clone 时,可以所用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码。各种写法如下:
git clone git@github.com:fsliurujie/test.git --SSH协议
git clone git://github.com/fsliurujie/test.git --GIT协议
git clone https://github.com/fsliurujie/test.git --HTTPS协议
- Git基本操作:
// 初始化
$ mkdir runoob // 新建文件夹
$ cd runoob/ // 转到新文件夹目录下
$ git init // 初始化
$ ls -a // 查看文件夹目录
. .. .git
$ cat hello.vue //查看 文件内容$ git clone [url]
// 克隆项目。默认情况下,Git 会按照你提供的 URL 所指示的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的项目名称。如果你想要一个不一样的名字, 你可以在该命令后加上你想要的名称。
$ cd 项目名称 // 切换到i项目目录下
$ ls // 查看项目目录$ git branch //列出本地分支
$ git branch (branchname) // 创建分支
$ git branch -d (branchname) // 删除分支
$ git checkout (branchname) // 切换分支,当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容
$ git checkout -b (branchname) // 创建新分支并立即切换到该分支下$ git status // 查看在你上次提交之后是否有修改
$ git status -s // 获得简短的结果输出将添加或修改提交到缓存:
$ git add README hello.php // 添加多个指定的文件
$ git add . // 添加当前项目的所有文件git diff 有两个主要场景:
查看执行 git status 的结果的详细信息;
显示已写入缓存与已修改但尚未写入缓存的改动的区别。
$ git diff // 查看尚未缓存的改动
$ git diff --cached // 查看已缓存的改动
$ git diff HEAD // 查看已缓存的与未缓存的所有改动
$ git diff --stat // 显示摘要而非整个 diffgit commit将缓存区的内容添加到仓库
git为了记录用户的每一次提交,所以第一步会确认需要配置用户名和邮箱地址
$ git config --global user.name 'runoob' // 配置用户名
$ git config --global user.email test@runoob.com // 配置邮箱地址git reset HEAD 命令用于取消已缓存的内容,即之前 git add 添加,但是工作区不受影响
$ git reset HEAD hello.php // 取消其中一个文件的缓存
$ git commit -m '说明' // 再执行 git commit,只会将 剩余的缓存文件的改动提交git rm 删除文件
git rm <file>
git rm -f <file> //删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm --cached <file> //直接从暂存区删除文件,工作区则不做出改变$ git checkout .
$ git checkout -- <file> // 会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
$ git checkout HEAD .
$ git checkout HEAD <file>
会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。$ git merge (branchname) // 合并分支$ git push origin [branch] // 推送到远程仓库$ git log // 查看提交历史
$ git log --oneline // 查看历史记录的简洁的版本
$ git log --graph // 查看历史中什么时候出现了分支、合并
$ git log --reverse // 逆向显示所有日志
$ git log --author //只查找指定用户的提交日志$ git tag -a v1.0 // 打标签。比如说,我们想为我们的 runoob 项目发布一个"1.0"版本。 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签。
-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。$ git remote //查看当前配置有哪些远程仓库
$ git remote -v // 加上 -v 参数,你还可以看到每个别名的实际链接地址。
$ git remote rm [别名] // 删除远程仓库$ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git //添加仓库 origin2
$ git remote rm origin2 //# 删除仓库 origin2提取远程仓库
$ git fetch origin // 1、从远程仓库下载新分支与数据
$ git merge origin/master // 2、从远端仓库提取数据并尝试合并到当前分支
- 远程仓库:
$ git remote add [shortname] [url] // 添加一个新的远程仓库本例以 Github 为例作为远程仓库,由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成 SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
之后会要求确认路径和输入密码回到 github 上,进入 Account => Settings(账户配置)=> 左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key验证是否成功,输入以下命令:
$ ssh -T git@github.com
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
- Git 服务器搭建:
2019 年开始 Github 私有存储库也可以无限制使用。
这当然我们也可以自己搭建一台 Git 服务器作为私有仓库使用。
1、安装Git
$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
$ yum install git
2、创建证书登录
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
如果没有该文件创建它:
$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys
3、初始化Git仓库
首先我们选定一个目录作为Git仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令:
$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo$ git init --bare runoob.git
Initialized empty Git repository in /home/gitrepo/runoob.git/
以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:
$ chown -R git:git runoob.git
4、克隆仓库
$ git clone git@192.168.45.4:/home/gitrepo/runoob.git
Cloning into 'runoob'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
192.168.45.4 为 Git 所在服务器 ip ,你需要将其修改为你自己的 Git 服务 ip。
这样我们的 Git 服务器安装就完成。