zoukankan      html  css  js  c++  java
  • GIT安装部署

    git

    git简介

    Git不仅是一款开源的分布式版本控制系统,而且有其独特的功能特性,例如大多数的分布式版本控制系统只会记录每次文件的变化,说白了就是只会关心文件的内容变化差异,而Git则是关注于文件数据整体的变化,直接会将文件提交时的数据保存成快照,而非仅记录差异内容,并且使用SHA-1加密算法保证数据的完整性。

    Git为了提高效率,对于没有被修改的文件,则不会重复存储,而是创建一个链接指向之前存储过的文件。

    在正式使用前,我们还需要弄清楚Git的三种重要模式,分别是已提交、已修改、已暂存

    已提交(committed):表示数据文件已经顺利提交到Git数据库中。

    已修改(modified):表示数据文件已经被修改,但未被保存到Git数据库中。

    已暂存(staged):表示数据文件已经被修改,并会在下次提交时提交到Git数据库中。

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


    Git是分布式的版本控制系统,我们只要有了一个原始Git版本仓库,就可以让其他主机克隆走这个原始版本仓库,从而使得一个Git版本仓库可以被同时分布到不同的主机之上,并且每台主机的版本库都是一样的,没有主次之分,极大的保证了数据安全性,并使得用户能够自主选择向那个Git服务器推送文件了,其实部署一个git服务器是非常简单的。


    安装git

    yum install git -y

    配置git用户

    git config --global user.name "yangyang"

    配置用户邮箱

    git config --global user.email "yangyang@mail.com"

    带颜色

    git config --global color.ui true

    Git常用命令

    add #添加文件内容至索引
    
    bisect #通过二分查找定位引入 bug 的变更
    
    branch #列出、创建或删除分支
    
    checkout #检出一个分支或路径到工作区
    
    clone #克隆一个版本库到一个新目录
    
    commit #记录变更到版本库
    
    diff #显示提交之间、提交和工作区之间等的差异
    
    fetch #从另外一个版本库下载对象和引用
    
    grep #输出和模式匹配的行
    
    init #创建一个空的 Git 版本库或重新初始化一个已存在的版本库
    
    log #显示提交日志
    
    merge #合并两个或更多开发历史
    
    mv #移动或重命名一个文件、目录或符号链接
    
    pull #获取并合并另外的版本库或一个本地分支
    
    push #更新远程引用和相关的对象
    
    rebase #本地提交转移至更新后的上游分支中
    
    reset #重置当前HEAD到指定状态
    
    rm #从工作区和索引中删除文件
    
    show #显示各种类型的对象
    
    status #显示工作区状态
    
    tag #创建、列出、删除或校验一个GPG签名的 tag 对象
    
     

    提交数据

    mkdir yangyang

    创建一个工作目录

    cd yangyang

    初始化git工作目录

    git init

    初始化空的 Git 版本库于

    /root/yangyang/.git/

    创建文件

    touch readme

    创建文件

    git add readme.txt

    添加文件到暂存区

    查看状态
    git status
    # 位于分支 master
    #
    # 初始提交
    #
    # 要提交的变更:
    # (使用 "git rm --cached <file>..." 撤出暂存区)
    #
    # 新文件: readme.txt
    #
    # 未跟踪的文件:

    提交到仓库

    git commit -m "the fisst commit"

    [master(根提交) 4367d80] the fisst commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 readme.txt


    git移除数据

    创建文件

    touch database

    添加到文件到暂存区

    git add database

    查看状态

    git status
    # 位于分支 master # 要提交的变更: # (使用
    "git reset HEAD <file>..." 撤出暂存区) # # 新文件: database #

    移除暂存区文件(并不会删除文件)

    git rm --cached database
    rm 'database'


    ###强制删除文件和git缓存区

    git rm -f database
    
    (database 文件也没了)

    git移动数据

    重命名

    git mv readme.txt test.txt
    git status
    
    
    # 位于分支 master
    # 要提交的变更:
    # (使用 "git reset HEAD <file>..." 撤出暂存区)
    #
    # 重命名: readme.txt -> test.txt

    在提交到仓库

    git commit -m "changed name"
    
    
    [master 8a8b23d] changed name
    1 file changed, 0 insertions(+), 0 deletions(-)
    rename readme.txt => test.txt (100%)


    git历史记录

    git log
    
    
    commit 8a8b23d984b69fb30db6a1cec40f27ba6b873652
    Author: yangyang <yangyang@mail.com>
    Date: Fri May 11 10:12:14 2018 +0800
    
    changed name
    
    commit 4367d804810b6309b925720498e7cbaa641dba93
    Author: yangyang <yangyang@mail.com>
    Date: Fri May 11 10:06:56 2018 +0800
    
    the fisst commit

    查看最近几条记录

    git log -2

    显示每次提交的内容差异

    git log -p -1

    #–pretty根据不同的格式展示提交的历史信息

    git log –pretty=oneline

    #以更详细的模式输出提交的历史记录

    git log –pretty=fuller -2

    还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:

    %s 提交说明。
    
    %cd 提交日期。
    
    %an 作者的名字。
    
    %cn 提交者的姓名。
    
    %ce 提交者的电子邮件。
    
    %H 提交对象的完整SHA-1哈希字串。
    
    %h 提交对象的简短SHA-1哈希字串。
    
    %T 树对象的完整SHA-1哈希字串。
    
    %t 树对象的简短SHA-1哈希字串。
    
    %P 父对象的完整SHA-1哈希字串。
    
    %p 父对象的简短SHA-1哈希字串。
    
    %ad 作者的修订时间。
    
     
    git log –pretty=fomat:”%h %cn”

    #查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名

    fomat:2caa209 yangyang
    fomat:88f3791 yangyang
    fomat:76c486f yangyang


    git数还原
    添加一段文字

    echo "yangyang">readme.txt 

    提交到暂存区

    git add readme.txt

    提交到仓库

    git commit -m "yangyang"

    在此追加一段话到readme

    echo "hellow ....">>readme.txt 

    添加到暂存区

    git add readme.txt

    提交

    git commit -m "hello"

    觉得写得不怎么样,想还原某一次提交的快照

    git log --pretty=oneline
    a7542d38edb628dd48c4118993784fec92d4fbbf hello 84d3786398cfa203ffc1c7015033457c72e5c72f yangyang


    Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

    还原上一次提交版本

    git reset --hard HEAD^

    HEAD 现在位于 84d3786 yangyang


    查看你的文件

    cat readme.txt
    yangyang

    #这时候又想还原的最新的版本。。。。

    git log --pretty=oneline
    
    
    84d3786398cfa203ffc1c7015033457c72e5c72f yangyang
    8a8b23d984b69fb30db6a1cec40f27ba6b873652 changed name
    4367d804810b6309b925720498e7cbaa641dba93 the fisst commit

    发现没有hello没有了。。。。
    使用reflog 查看历史更新点

    git reflog
    
    
    84d3786 HEAD@{0}: reset: moving to HEAD^
    a7542d3 HEAD@{1}: commit: hello
    84d3786 HEAD@{2}: commit: yangyang
    8a8b23d HEAD@{3}: reset: moving to HEAD^
    6041523 HEAD@{4}: commit: introduction software
    8a8b23d HEAD@{5}: commit: changed name
    4367d80 HEAD@{6}: commit (initial): the fisst commit

    还原

    git reset --hard a7542d3

    HEAD 现在位于 a7542d3 hello

    cat readme.txt 
    yangyang
    hellow ...

    .


    Git管理分支结构

    分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫”拍照功能”的分支,这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这样即能保证代码不丢失,又不影响其他人的工作。

    创建git分支

    git branch linux

    切换分支

    git checkou linux

    查看当前分支情况,当前分支前面有*号

    git branch
    * linux
    master
    
     

    添加以行字符串

    echo “Create new branch is linux” >> readme.txt

    提交到暂存区

    git add readme.txt

    提交到git仓库

    git commit -m "new branch"

    我们提交后文件 切换回到master分支

    git checkout master

    切换到分支 'master'


    查看文件

    cat readme.txt 
    yangyang
    hellow ....

    git合并分支

    查看现在在那个分支

    git branch
    linux
    * master


    #合并分支

    git merge linux
    更新 a7542d3..0918787
    Fast-forward
    readme.txt | 1 +
    1 file changed, 1 insertion(+)

    查看文件

    cat readme.txt 
    yangyang hellow .... create
    new branch is linux

    删除分支

    git branch -d linux

    已删除分支 linux(曾为 0918787)。

    查看分支

    git branch
    * master

    git管理标签

    当版本仓库内的数据有个大的改善或者功能更新,我们经常会打一个类似于软件版本号的标签,这样通过标签就可以将版本库中的某个历史版本给记录下来,方便我们随时将特定历史时期的数据取出来用,另外打标签其实只是像某个历史版本做了一个指针,所以一般都是瞬间完成的。


    #当前提交内容打个标签(方便快速回滚)
    git tag v1.0

    查看当前所有标签
    git tag

    查看当前1.0版本详细信息
    git show v1.0


    创建带标签及说明
    git tag v1.2 -m "version 1.2 release is test"


    删除之前标签
    git tag -d v1.0


    查看
    git tag
    v1.2

    gitlab安装部署

    yum install curl openssh-server postfix -y


    systemctl enable sshd postfix

    systemctl start sshd postfix

    *如果有防火墙
    firewall-cmd –permanent –add-service=http

    systemctl reload firewalld


    添加gitlab包服务器安装包

    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

    yum install gitlab-ce
    (挺慢的,如果不行https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/)

    配置并启动
    gitlab-ctl reconfigure

    gitlab-ctl status

    gitlab-ctl stop

    gitlab-ctl start


    浏览到主机名和登录
    root
    密码自动生成

    GitLab配置ssh
    #如果是默认的22,就必须修改,否则不生效,我这里改为了52113
    sed -i 's/#Port 22/Port 52113/g' /etc/ssh/sshd_config


    systemctl restart sshd #重启sshd服务

    #修改gitlab里面的ssh_prot端口为自己服务器的sshd端口,声明gitlab.yml中的配置会被这个给覆盖


    grep “ssh_port” /etc/gitlab/gitlab.rb #修改gitlab里面的ssh_prot端口为自己服务器的sshd端口,声明gitlab.yml中的配置会被这个给覆盖

    gitlab_rails[‘gitlab_shell_ssh_port’] = 52113

    gitlab重新加载配置文件即可

    gitlab-ctl reconfigure

    GitHub托管服务

     Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。
    大多数用户都是为了寻找资源而爱上Github的,首先进入网站,点击注册(Sign up):

     

    我们在向Github推送文件时,可以选择SSH协议模式,在本机生成密钥

    生成密钥

    ssh-keygen

    查看公钥
    cat ~/.ssh/id_rsa.pub
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDO2dis085TOtTqAFU7aUDh2siAav/6HgXuC3+yIFxAFvlKNn88GLqoqlFlnVCobgvri56nqYo1fpclVk0Z+ZoShLF0HCFfZRZVlbwXC6y6uy8BqzMzKXptUTPBw2SbL843kNVyk01kx2kop3YukSG4fWsr2CRUeNUiqe/3q4S1Hzyzd+u6W67W9ax4W0Ud2r3v1mkc0L3lIl2aVLk1G/qhvcD+K7ivo2zEozDVzAsawim+taYa6s8wM8N99ij0+WrvRLN55CscYTnX4u52Vg1U7bdGtz05KmVUW2Prb/fnsnGhJ5CJz40VNqHxpVmrsiRf7TcMdNKAX4TARqYEhkjD root@localhost.localdomain

    手动克隆

     git clone https://github.com/sky00747/demo.git

    上传测试

    cd demo/

    git add test.txt
    git commit -m "add test file"
    git remote
    origin

    上传

    git push -u origin master

    git push -u origin master
    Username for 'https://github.com': sky00747
    Password for 'https://sky00747@github.com': 
    Counting objects: 4, done.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 282 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To https://github.com/sky00747/demo.git
       b873aeb..466e6a9  master -> master
    分支 master 设置为跟踪来自 origin 的远程分支 master。

  • 相关阅读:
    MySQL性能调优语句
    APP测试
    JForum项目搭建
    Bug的等级及定位
    mysql any和all的用法
    mysql产生随机数
    MySQL存储过程例子
    【转】 卡特兰数
    牛客小白月赛5 I 区间 (interval) 【前缀和】
    牛客小白月赛5 D 阶乘(factorial) 【前缀】
  • 原文地址:https://www.cnblogs.com/sky00747/p/9024786.html
Copyright © 2011-2022 走看看