一、概述

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 的详细介绍请点这里
Git 的下载地址请点这里

Git介绍及安装配置的更多相关文章

  1. kudu介绍及安装配置

    kudu介绍及安装配置 介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity har ...

  2. git介绍及安装

    git介绍 git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目.git是linus Torvalds为了帮助管理Linux内核开发的一个开放源码的版本控制软件. Git 与常用 ...

  3. CentOS6.4下Git服务器Gitosis安装配置

    1.安装GIt: #yum install git 2.增加一个git用户 #useradd git #passwd git 3.创建git仓库存储目录,设置权限 #mkdir /home/git/r ...

  4. MySQL介绍,下载,安装,配置

    MySQL用了很多年了,今天写个总结. 一.介绍 MySQL是开源软件,后来归Oracle所有.开源便于软件的完善改进.但开源不等于滥用,也不等于完全免费.MySQL有商业版,商业用途是付费的.也有免 ...

  5. Git & GitHub 的安装配置

    参考   教你免费搭建个人博客,Hexo&Github   安装Git 1. 注册 GitHub 注册.登录 https://github.com/ 2. 创建仓库 在 GitHub 的右上角 ...

  6. kafka介绍及安装配置(windows)

    Kafka介绍 Kafka是分布式的发布—订阅消息系统.它最初由LinkedIn(领英)公司发布,使用Scala和Java语言编写,与2010年12月份开源,成为Apache的顶级项目.Kafka是一 ...

  7. Git介绍、安装、命令和实战

    一.Git介绍 Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. 二.Git安装(Mac系统) 在Git官网下载安装包双击直接安装 在终端输入git来检测Git ...

  8. 每天收获一点点------Hadoop基本介绍与安装配置

    一.Hadoop的发展历史 说到Hadoop的起源,不得不说到一个传奇的IT公司—全球IT技术的引领者Google.Google(自称)为云计算概念的提出者,在自身多年的搜索引擎业务中构建了突破性的G ...

  9. Git(介绍和安装)

    Git 是什么 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制系统. 与常用的版本控制工具 CVS, Subversion 等不同,它 ...

随机推荐

  1. iOS高版本备份恢复到低版本系统的方法

    一般来说,在更新iOS系统的时候我们都会建议大家先用iTunes对系统进行完整备份.但时不时都会有人偷懒,或者使用手机OTA升级而没有对系统备份,最终导致不满意新系统了,想降级却无备份可以恢复的尴尬局 ...

  2. Web性能压力测试工具之WebBench

    在运维工作中,压力测试是一项很重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验.但是,在压力测试中存在一个共性,那就是压力测试的结果 ...

  3. JAVA-JSP内置对象之request获得所有的参数名称

    相关资料:<21天学通Java Web开发> 获得所有的参数名称1.request对象的getParameterNames()方法可以获得所有的参数名称. RequestForm2.jsp ...

  4. 2. K-Means的优化

    1. K-Means原理解析 2. K-Means的优化 3. sklearn的K-Means的使用 4. K-Means和K-Means++实现 1. 前言 上一篇博文K-Means原理解析简单清晰 ...

  5. C# Null 赋值

    在此之前,我们先看一段程序: class Program    {        static void Main(string[] args)        {            Childre ...

  6. sql分割字符串

    DECLARE @str NVARCHAR(MAX); SET @str = 'aa|bb|cc|dd'; ) SET @str += '|' BEGIN SET @n = LEFT(@str, CH ...

  7. 快速排序,一个爱情故事-java版

    public static void myquicksort(int[] ages,int girl,int boy){ //这是一个站在数组两端,追求完美爱情的故事 //年龄不匹配的不要 //第0步 ...

  8. Linux 下 less 命令

    less 命令功能强大,上能搜索,下能动态加载查看日志,并且每一屏内容都是预加载,不会加载整个文件,所以不会由于搜索内容过多把机器卡死 语法 less [参数] 文件地址 参数说明 -N:显示行号 f ...

  9. Go Revel - Filters(过滤器链)

    `Fitlers`过滤器链是一个中间件,它们具有单独的功能,并作为管道对请求做链式处理.过滤器链执行框架的所有功能. 对过滤器链的源码分析,请移步 Go Revel - Filter(过滤器)源码分析 ...

  10. bluetooth在linux应用开发

    linux内Bluetooth的协议栈为BlueZ,http://www.bluez.org/.在4.46上,BlueZ实现了对A2DP Sink的支持,而之前的版本只支持A2DP Source.