zoukankan      html  css  js  c++  java
  • git的搭建与简单实用

    svn是中央集中版本,所有的人都下载同一个版本去更新,git是分布式的,可以现在自己想要的分支。svn集中式版本控制系统不但速度慢,而且必须联网才能使用
    git系统的安全性高。git及其强大的分支管理
    git不仅仅是个版本系统,他也是个内容管理系统,工作管理系统等
    git是分布式的svn不是,这是git和其他非分布式的版本控制系统,列如svn cvs最核心的区别
    git把内容按元数据方式存储,而svn是按文件,所有的资源控制系统都是吧文件的源信息隐藏在一个类似svn.cvs等文件夹里
    git和svn的分支:分支再svn中一点不特别,就是版本库中的另外的一个目录
    git没有一个全局的版本号,而svn有 目前为止svn相比git缺少的最大的特征
    git内容完整性要优于svn:git的内容储存使用的是sha-1
    哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障时和网络问题是降低对版本库的破环////

    git分布式需要的实验环境两台7.5的服务器

    永久修改主机名
    vim /etc/hostname
    devops应用
    开发写完代码上传到git或者Gitlab,Jenkins从gitlab拉去代码,(叫持续集成ci)
    maven就是java的yum仓库
    分布式集成了本地仓库和远程仓库的合成。
    先上传到本地仓库,然后在吧本地仓库推到远程仓库。即使没有远程仓库。两个本地仓库以可以互推。
    公有远程仓库的网址
    https://github.com
    可以注册自己的远程仓库。

    git需要做全局配置,
    基本就是告诉用户是谁,邮箱是谁
    工作流程
    git在工作之前需要向建立工作区,即建立git项目目录
    将工作区里的东西暂存 git add
    暂存区提交到本地 git commit
    本地提交到远程,git push
    可以用yum直接安装,也可以编译安装

    编译安装过程
    yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
    yum -y install gcc perl-ExtUtils-MakeMaker 
    tar xf git-2.9.5.tar.gz -C /usr/src/
    cd /usr/src/git-2.9.5/
    ./configure --prefix=/usr/local/git
    make && make install
    ln -sf /usr/local/git/bin/* /usr/bin/
    ln -s /usr/libexec/git-core/* /usr/bin/
    全局变量开启中文
    export LANG=zh_CN.UTF8
    初始git目录
    mkdir -p /mycode
    cd /mycode
    [root@git1 mycode]# git init
    初始化空的 Git 仓库于 /mycode/.git/
    创建一个暂时缓存
    [root@git mycode]# touch test.txt
    提交到暂存区
    [root@git mycode]# git add *(删除的暂存提交git rm 文件名)
    
    [root@git mycode]# git status
    位于分支 master
    
    初始提交
    
    要提交的变更:
    (使用 "git rm --cached <文件>..." 以取消暂存)
    
    新文件: test.txt
    
    git commit 将暂存提交到本地仓库
    必须-m写说明,要不不让提交
    [root@git mycode]# git commit -m "test"
    
    *** Please tell me who you are.
    
    Run
    
    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    
    to set your account's default identity.
    Omit --global to set the identity only in this repository.
    
    fatal: unable to auto-detect email address (got 'root@git.(none)')
    
    还需要做全局变量,告诉他是谁,还有邮箱
    然后提交成功
    [root@git mycode]# git config --global user.email "491537692@qq.com"
    [root@git mycode]# git config --global user.name "cashsunan"
    [root@git mycode]# git commit -m "test"
    [master(根提交) cc12e4d] test
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test.txt
    [root@git mycode]# 
    查看远程仓库
    [root@git mycode]# git remote -v
    添加到远程仓库
    git remote add 代号 url
    默认的代号叫origin
    [root@git mycode]# git remote add test https://github.com/cashsunan/sunan.git
    将文件推到远程仓库
    git push -u 代号(给仓库设置的代号)master(要推到那个分支)
    推送 标签 git push -u 代号 标签
    [root@git mycode]# git push -u test master
    Username for 'https://github.com': 491537692@qq.com
    Password for 'https://491537692@qq.com@github.com': 
    对象计数中: 3, 完成.
    写入对象中: 100% (3/3), 200 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    To https://github.com/cashsunan/sunan.git
    * [new branch] master -> master
    分支 master 设置为跟踪来自 test 的远程分支 master。

    git clone 克隆一个现有的仓库到本地

    要到另一个服务器上实验
    [root@git1 mycode]# git clone https://github.com/cashsunan/sunan.git master
    正克隆到 'master'...
    remote: Enumerating objects: 3, done.
    remote: Counting objects: 100% (3/3), done.
    remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
    展开对象中: 100% (3/3), 完成.
    检查连接... 完成。
    [root@git1 mycode]# ls 
    master
    [root@git1 mycode]# cd master/
    [root@git1 master]# ls 
    test.txt
    [root@git1 master]# git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。
    nothing to commit, working tree clean
    [root@git1 master]# echo "xxx" >> test.txt 
    [root@git1 master]# touch exe.txt
    [root@git1 master]# git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。
    尚未暂存以备提交的变更:
    (使用 "git add <文件>..." 更新要提交的内容)
    (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
    修改: test.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a"
    
    再次提交
    [root@git1 master]# git add *
    [root@git1 master]# git commit -m "wo cao "
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。
    尚未暂存以备提交的变更:
    修改: test.txt
    
    修改尚未加入提交
    [root@git1 master]# git remote -v
    origin    https://github.com/cashsunan/sunan.git (fetch)
    origin    https://github.com/cashsunan/sunan.git (push)
    [root@git1 master]# git push -u origin master
    Username for 'https://github.com': 491537692@qq.com
    Password for 'https://491537692@qq.com@github.com': 
    对象计数中: 3, 完成.
    压缩对象中: 100% (2/2), 完成.
    写入对象中: 100% (3/3), 277 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    To https://github.com/cashsunan/sunan.git
    cc12e4d..5535cc9 master -> master
    分支 master 设置为跟踪来自 origin 的远程分支 master。

    将远程的仓库拉倒本地

    在git上实验
    [root@git mycode]# git remote -v
    test    https://github.com/cashsunan/sunan.git (fetch)
    test    https://github.com/cashsunan/sunan.git (push)
    [root@git mycode]# git fetch -u test master
    来自 https://github.com/cashsunan/sunan
    * branch master -> FETCH_HEAD
    [root@git mycode]# git status
    位于分支 master
    您的分支落后 'test/master'1 个提交,并且可以快进。
    (使用 "git pull" 来更新您的本地分支)
    nothing to commit, working tree clean
    
    [root@git mycode]# git checkout
    您的分支落后 'test/master'1 个提交,并且可以快进。
    (使用 "git pull" 来更新您的本地分支)
    
    
    将远程仓库的变更合并到本地
    [root@git mycode]# git merge test/master
    更新 cc12e4d..5535cc9
    Fast-forward
    exe.txt | 0
    test.txt | 3 +++
    2 files changed, 3 insertions(+)
    create mode 100644 exe.txt
    
     
    
    将远程的仓库一步到位的更新到本地,
    先在git服务器提交新的变化
    [root@git mycode]# echo "adfasdf" >> exe.txt 
    [root@git mycode]# git add *
    [root@git mycode]# git commit -m "2ci"
    [master e770d42] 2ci
    1 file changed, 1 insertion(+)
    [root@git mycode]# git push -u test master
    Username for 'https://github.com': 491537692@qq.com
    Password for 'https://491537692@qq.com@github.com': 
    对象计数中: 3, 完成.
    压缩对象中: 100% (2/2), 完成.
    写入对象中: 100% (3/3), 266 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    To https://github.com/cashsunan/sunan.git
    5535cc9..e770d42 master -> master
    分支 master 设置为跟踪来自 test 的远程分支 master
    
     
    
    提交完成后在git1上直接pull拉取
    [root@git1 master]# git pull origin master
    remote: Enumerating objects: 5, done.
    remote: Counting objects: 100% (5/5), done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
    展开对象中: 100% (3/3), 完成.
    来自 https://github.com/cashsunan/sunan
    * branch master -> FETCH_HEAD
    5535cc9..e770d42 master -> origin/master
    更新 5535cc9..e770d42
    Fast-forward
    exe.txt | 1 +
    1 file changed, 1 insertion(+)

     git命令

    git命令在本地仓库和暂存区的命令
    文件的改名: git mv xxx yyy
    撤销命令 :git reset 文件名 
    本地仓库文件和修改的工作区文件进行对比 :git diff 文件名 (-是删除+添加)
    查看git的本地历史提交记录:git log
    git log的参数 :git log -2 最近2次提交的
    git log -p -1 显示每次提交的内容差异
    git log --stat -2 :stat简要显示数据的增改行数,这样就能看到提交中修改过的内容
    git log --pretty=oneline:一行显示提交的历史记录
    本地回到上一个版本的命令 git reset --hard HEAD^
    回滚到指定版本,git reset --hard 历史记录的编码号
    回滚错了回复, git reflog : 查看历史的更新点. 里边有编码号,查到了编码号之间回滚
    git reset --hard 历史记录的编码号
    创建版本号
    git tag 版本号
    [root@git1 master]# git tag v1.0
    [root@git1 master]# git tag 
    v1.0
    查看版本的标签状态
    [root@git1 master]# git show v1.0
    commit e770d42ad78a3f2a6892bd6ee39a2a78e5a6a119
    Author: cashsunan <491537692@qq.com>
    Date: Sun Dec 16 17:31:19 2018 +0800
    
    2ci
    
    diff --git a/exe.txt b/exe.txt
    index e69de29..25975e2 100644
    --- a/exe.txt
    +++ b/exe.txt
    @@ -0,0 +1 @@
    删除标签
    [root@git1 master]# git tag -d v1.0
    用标签回滚
    [root@git1 master]# git reset --hard v2.0
    HEAD 现在位于 e770d42 2ci
    
    已删除标签 'v1.0'(曾为 e770d42)
    
    创建分支 git branch xx
    查看分支 git branch 
    删除分支 git branch -d xx
    强删分支 git branch -D xx
    切换分支 git checkout xx
    检查本地分支和远程分支是否相同 git checkout
    暂存区是公用的,在工作之前要不就情况,要不就提交
    合并分支
    自动合并
    在主支上 git merge 想要合并的分支
    [root@git1 master]# git merge dev
    更新 e770d42..ae291fe
    Fast-forward
    1.txt | 0
    quit | 12 ++++++++++++
    test.txt | 1 +
    3 files changed, 13 insertions(+)
    create mode 100644 1.txt
    create mode 100644 quit
    [root@git1 master]# git branch
    dev
    * master
    
    [root@git1 master]# git push -u origin master
    Username for 'https://github.com': 491537692@qq.com
    Password for 'https://491537692@qq.com@github.com': 
    Total 0 (delta 0), reused 0 (delta 0)
    To https://github.com/cashsunan/sunan.git
    e770d42..ae291fe master -> master
    分支 master 设置为跟踪来自 origin 的远程分支 master。
    [root@git1 master]# git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致

     git提交忽略文件写法

    gitignore文本忽略文件,
    会创建以个隐藏的文件.gitingnore
    写法
    target
    *.logt 表示忽略项目中所有以.log结尾的文件
    ?.idea表示忽略一个字符以.idea结尾的文件
    /errt.log忽略根目录下的error.log文件
    **/java/匹配所有java目录下的所有文件
    !/error.log表示在前面的匹配规则中,被忽略的文件,不想被忽略,就加!


    文件代码冲突解决办法
    将git返回的代码的文件打开,二选一,删除一个就可以了


    git 初始化只是当目录使用
    git --brae init
    克隆同样是子git的办法
    git clone 账号@IP地址:路径
    输入的密码是账号的密码,
    也可以做个免秘钥
    在家目录
    ssh-keygen
    ssh-copy-id-i ~./ssh/id_rs.pub 账号@ip

  • 相关阅读:
    python django 路由系统
    django的as_view方法实现分析
    基类View
    Django templates(模板)
    Django ORM那些相关操作
    $.ajax()方法详解
    Http协议中的get和post
    Django组件-cookie,session
    Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
    Django基础(4) ----django多表添加,基于对象的跨表查询
  • 原文地址:https://www.cnblogs.com/cash-su/p/10131632.html
Copyright © 2011-2022 走看看