Git介绍及安装配置
一、概述
1.1git概念
Git是一个开源的分布式版本控制系统,用于敏捷高效处理任意规模的项目,其作者为Linux创造者Linus Torvalds为管理Linux内核而开放的一个开源的版本控制柔软剂与其他版本控制工具例如:CVS,Subversion 等不同,它可采用分布式版本,不必依赖于服务器端软件支持。
1.2Git与SVN区别
Git不仅仅是版本控制系统,也是一个内容管理系统相比与SVN的区别如下:
1.GIT为分布式,SVN则不是;
2.GIT按照元数据形式存储内容,讲所有资源孔子系统都是把文件的元数据隐藏在一个类似.svn,.cvs的文件夹内,而SVN是按文件;
3.GIT分支与SVN不同,分支在SVN内的另一个目录;
4.GIT没有全局版本号,SVN有全局版本号;
5.GIT内容完整性优于SVN,GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
1.3 GIT工作流程
1.克隆Git资源作为工作目录
2.在克隆的资源上添加或修改文件
3.如果他人修改,你可以进行资源更新
4.在提前查看修改
5.提交修改
6.在修改完成后,如果发现错误,可撤回提交并再次修改提交
流程图:
1.4 基本概念
工作区:本地PC可以看到的目录
暂存区:英文名称stage,或index,一般存放在“.git目录”下的index文件(.git/index)中,所以我们把暂存区有时也称作索引(index)
版本库:工作区有一个隐藏的目录.git,此为Git的版本库
图中左侧为工作区,右侧为版本库,在版本库中标记为“index”的区域为暂存区(stage,index),标记为“master”的是master分支所代表的目录树。
图中可以看到“HEAD”实际指向的是master分支的一个“游标”,所以途中的HEAD的地方可以用master来替换。
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行
"git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD
指向的 master
分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
二、安装配置
2.1 Git安装
yum 安装
yum install git
git --version #查看版本
源码安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc-c++ perl-ExtUtils-MakeMaker wget -y
wget https://www.kernel.org/pub/software/scm/git/git-2.7.3.tar.gz
tar xf git-2.7.3.tar.gz
cd git-2.7.3
make configure
./configure --prefix=/usr/local/git
make profix=/usr/local/git
make install
echo "export PATH=$PATH:/usr/local/git/bin" > /etc/profile.d/git.sh #添加环境变量
source /etc/profile.d/git.sh
2.2 Git配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
配置用户信息
git config --global user.name "kaliarch"
git config --global user.email kaliarch@anchnet.com
git config --list #查看配置
2.3 创建仓库
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以
git init
是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。
该命令执行完后会在当前目录生成一个 .git 目录。
使用我们指定目录作为Git仓库。
初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
git add *.c
git add README
git commit -m '初始化项目版本'
git clone
三、基础操作
3.1 创建目录初始化
mkdir /workspace
cd /workspace
git init
此时Git仓库就创建完成了,此时为一个空仓库(empty Git repository),可以发现当前目录下有一个隐藏的目录
.git
,此目录为Git来跟踪管理版本库,建议不要修改内部文件,以免Git仓库遭到破坏。
使用git clone
拷贝一个Git仓库到本地,可以进行项目查看与修改
git add 接下来我们执行 git add 命令来添加文件:
git status -s git status 以查看在你上次提交之后是否有修改。
3.2 版本回退
连续添加多个文件后,执行commit
提交后,使用git log
查看不同版本
可以使用--oneline
选项查看历史记录简洁版本,也可用--graph
选项,查看历史中什么时候出现了分支、合并,
也可用--reverse
参数逆向显示所有日志。
添加文件第一步使用git add
是将文件添加进暂存区,第二部git commit
提交更改,实际上为讲暂存区的所有内容提交到当前分支。
git reset HEAD 命令用于取消缓存的内容。
HEAD指向的版本,因此,Git允许回退版本,使用命令git reset --hard commit_id
回退前,可使用git log
查看历史提交记录,以便确回退到那个版本
重新返回回退前的,使用git reflog查看历史命令,回到到未来的某个版本。
Git 跟踪并管理的是修改,而非文件,当使用git add命令后,在工作区的第一次修改给放如暂存区,但是 ,在工作区的第二次修改没放入暂存区,用git commit只负责把暂存区的修改提交,也就是第一次的修改被提交了,第二次的修改未被提交。
3.3 删除文件
直接在工作区删除,对暂存区和版本库没有任何影响。本地删除如果要反映在暂存区中应该用git rm命令,对不想删除的文件执行git
checkout -- <file>,可以让文件在工作区重现。用git
rm命令执行删除后,删除动作加入了暂存区,这时执行提交动作就从真正意义上执行了文件删除,不过文件只是在版本库的最新提交中被删除了,在历史提交中尚在。
3.4 移动文件(改名操作)
改名操作相当于对旧文件执行删除,对新文件执行添加
git mv可以由git rm和git add两条命令取代
$ git mv oldname newname 完成改名操作
3.5 恢复删除文件
git checkout -- readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
1.一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
2.一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout -- test.txt
四、分支管理
几乎所有的版本控制系统都存在某种意义上的分支支持,使用分支意味这可以从开放主线来分离出来,可以在不影响主线的情况下继续工作
创建分支:
git branch (branchname)
git checkout -b (branchname)
#创建并切换到该分支下
查看分支
git branch
切换分支
git checkout (branchname)
当切换分支时,Git会用该分支的最后提交快照替换工作目录的内容,所以分支不需要多个目录
合并分支
git merge
当执行git init
时,缺省情况下Git会创建master分支
删除分支
git branch -d (branchname) -D
#强制删除
五、搭建GIT服务器
GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。
搭建Git服务器需要准备一台运行Linux的机器。
5.1 安装GIT
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel git -y
groupadd git
adduser git -g git
5.2 创建证书登录
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
如果没有该文件创建它:
cd /home/git/
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
5.3 初始化Git仓库
首先我们选定一个目录作为Git仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令:
su - git
mkdir gitrepo && cd gitrepo
git init --bare kaliarch.git
5.4 克隆仓库
git clone git@172.20.6.11:/home/git/gitrepo/kiliarch.git #172.20.6.11为本地git服务器的地址
注意:git服务器创建git用户,如果使用ssh登录拉去,不可进行git用户的登录shell,确保git客户端的公钥已经写入git服务器的authorized_keys内。
六、远程仓库(github)
注册GitHub帐号后,从本地GIT参考和GitHub仓库建传输是SSH加密的。
创建SSH KEY,在用户主目录下,如果没有.ssh目录及里面的id_rsa.pub文件,需进行公钥创建。
ssh-keygen -t rsa -C "youremail@example.com"
后面的 your_email@youremail.com 改为你在 github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。
在客户端验证是否已经添加成功ssh -T git@github.com
以下命令说明我们已成功连上 Github。
之后登录后点击" New repository "
创建成功后初始化本地
mkdir /dirgit # 创建测试目录
cd /dirgit # 进入测试目录
echo "# project" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:RedHatxl/project.git
git push -u origin master
添加远程地址
git remote add origin git@github.com:redhatxl/project.git
添加第二个仓库git remote add origin2 git@github.com:redhatxl/test.git
上传到第二个仓库it push -f origin2
如果你在创建 repository 的时候,加入了 README.md 或者 LICENSE ,那么 github 会拒绝你的 push 。你需要先执行 git pull origin master
执行 git push -u origin master 将本地仓库上传至Github的仓库并进行关联:
以后想在commit后同步到Github上,只要直接执行 git push 就可以。
查看当前远程库
git remote -v
1、从远程仓库下载新分支与数据:
git fetch
2、从远端仓库提取数据并尝试合并到当前分支:
git merge
3、删除远程仓库你可以使用命令:
git remote rm
4、 推送到 Github
git push origin master
更多Git 教程系列文章:
Git常用命令整理 http://www.linuxidc.com/Linux/2017-12/149316.htm
GitHub 使用教程图文详解 http://www.linuxidc.com/Linux/2014-09/106230.htm
Git使用图文详细教程 http://www.linuxidc.com/Linux/2016-11/136781.htm
Ubuntu Git安装与使用 http://www.linuxidc.com/Linux/2016-11/136769.htm
分享实用的GitHub 使用教程 http://www.linuxidc.com/Linux/2014-04/100556.htm
Git从入门到学会 http://www.linuxidc.com/Linux/2016-10/135872.htm
Git基本操作详解 http://www.linuxidc.com/Linux/2016-10/135691.htm
Git部署与常用基本命令详解 http://www.linuxidc.com/Linux/2017-06/144961.htm
分布式版本控制系统 Git 详细教程 http://www.linuxidc.com/Linux/2017-05/143747.htm
Git命令和配置技巧 http://www.linuxidc.com/Linux/2017-11/148423.htm
Git介绍及安装配置的更多相关文章
- kudu介绍及安装配置
kudu介绍及安装配置 介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity har ...
- git介绍及安装
git介绍 git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目.git是linus Torvalds为了帮助管理Linux内核开发的一个开放源码的版本控制软件. Git 与常用 ...
- CentOS6.4下Git服务器Gitosis安装配置
1.安装GIt: #yum install git 2.增加一个git用户 #useradd git #passwd git 3.创建git仓库存储目录,设置权限 #mkdir /home/git/r ...
- MySQL介绍,下载,安装,配置
MySQL用了很多年了,今天写个总结. 一.介绍 MySQL是开源软件,后来归Oracle所有.开源便于软件的完善改进.但开源不等于滥用,也不等于完全免费.MySQL有商业版,商业用途是付费的.也有免 ...
- Git & GitHub 的安装配置
参考 教你免费搭建个人博客,Hexo&Github 安装Git 1. 注册 GitHub 注册.登录 https://github.com/ 2. 创建仓库 在 GitHub 的右上角 ...
- kafka介绍及安装配置(windows)
Kafka介绍 Kafka是分布式的发布—订阅消息系统.它最初由LinkedIn(领英)公司发布,使用Scala和Java语言编写,与2010年12月份开源,成为Apache的顶级项目.Kafka是一 ...
- Git介绍、安装、命令和实战
一.Git介绍 Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. 二.Git安装(Mac系统) 在Git官网下载安装包双击直接安装 在终端输入git来检测Git ...
- 每天收获一点点------Hadoop基本介绍与安装配置
一.Hadoop的发展历史 说到Hadoop的起源,不得不说到一个传奇的IT公司—全球IT技术的引领者Google.Google(自称)为云计算概念的提出者,在自身多年的搜索引擎业务中构建了突破性的G ...
- Git(介绍和安装)
Git 是什么 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制系统. 与常用的版本控制工具 CVS, Subversion 等不同,它 ...
随机推荐
- WPF Image控件 Source: Byte[] ,BitmapImage 相互转换
文件转为byte[] FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read); byte[] desBytes ...
- 1. K近邻算法(KNN)
1. K近邻算法(KNN) 2. KNN和KdTree算法实现 1. 前言 K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用, ...
- call_user_func_array 应用场景分析
1. 场景一 a.你要调用的函数名是未知的 b.要调用函数的参数类型及个数也是未知的 定时任务类需要定时运行一个函数,则接口就可以类似这样设计: /** * 在$run_time时刻运行$call_b ...
- led子系统
最简单的led驱动就是从端口输出0或1来关闭或点亮灯.而我们这里讲的led子系统,主要是对led事件进行了分装和优化,这里我们主要讲的是可 以实现跨平台的led驱动.不管你是使用三星的平台,还是Atm ...
- jpegtran图片压缩工具
首先下载 jpegtran 下载地址为 http://jpegclub.org/jpegtran.exe jpegtran -copy none -optimize -perfect aa.jp ...
- sbt使用详解
sbt使用详解 安装: 我的系统为centos6.5故采用官方提供的在线安装: curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.re ...
- oozie 运行demo
昨晚装好了oozie,能启动了,并且配置了mysql作为数据库,好了,今天要执行oozie自带的demo了,好家伙,一执行就报错!报错很多,就不一一列举了,就说我最后解决的方法吧. oozie job ...
- UK 更新惊魂记
本文前提是.由于更easy安装各种webserver.数据库,redis缓存.mq等软件,笔者使用Ubuntu Kylin作为开发系统已经好长时间了. 而今天(2015-07-23)下午2时许,系统提 ...
- 多线程二:线程池(ThreadPool)
在上一篇中我们讲解了多线程的一些基本概念,并举了一些例子,在本章中我们将会讲解线程池:ThreadPool. 在开始讲解ThreadPool之前,我们先用下面的例子来回顾一下以前讲过的Thread. ...
- 再谈git的http服务
因为git服务器搬迁,需要重新安装git服务器,在网上搜索了下,发现之前的方法太复杂,复杂到自己都没彻底弄明白.其实通过git自带的git-http-backend脚本配合apache2的http服务 ...