• 版本控制


    一、关于版本控制

    Git官网中文版 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

    1、集中式版本控制

    Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?

    先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

    集中式版本控制,典型代表SVN集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

    而且如果集中式版本服务器宕机了,所有人都没法工作。

    2、分布式版本控制

    分布式版本控制,没有中央服务器的概念,每个人都有自己的版本库,因此每个人在工作时候,不需要联网,版本库本地即可管理。

    既然每个人都是一个完整的版本库,同事之间如果需要协作开发,就需要找一个用于“交换文件”的中央服务器,这个服务器不存在也不影响大家干活,只是用于交换文件内容。

    GIT最强大的功能还有分支管理,远甩SVN等软件。

    二、git安装与初始化

    Git有多重方式使用

    • 原生命令行,才能使用git所有命令,会git命令再去用gui图形工具,完全无压力
    • GUI图形软件,只是实现了git的部分功能,以减免操作难度,难以记住git原生命令
    • 不同的人会有不同的GUI图形工具,但是所有人用的git原生命令都一样,推荐学习命令

    在 Linux 上安装

    如果你想在 Linux 上用二进制安装程序来安装 Git,可以使用发行版包含的基础软件包管理工具来安装。 如果以Centos 上为例,你可以使用 yum:

    sudo yum install git

    如果你在基于 Debian 的发行版上,请尝试用 apt-get:

    sudo apt-get install git

    在 Mac 上安装

    在mac安装git方式很多,最简单是用brew包管理

    安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/

    brew install git

    如果你想安装更新的版本,可以使用二进制安装程序。 官方维护的 OSX Git 安装程序可以在 Git 官方网站下载,网址为 http://git-scm.com/download/mac

    Windows安装

    在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。

    安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

    运行git前的配置

    既然已经在系统上安装了 Git,你会想要做几件事来定制你的 Git 环境。 每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。

    Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

    这个用户指的是linux用户

    1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。

    2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。

    3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。 --local 当前仓库配置

    用户信息

    当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com

    git配置相关命令

    yum install git -y  安装git

    git --version  查看git版本 git config
    --system --list 查看系统所有linux用户的通用配置,此命令检查/etc/gitconfig

    git config --global --list 查看当前linux用户的配置,检查~/.gitconfig文件

    git config --local --list 查看git目录中的仓库配置文件,.git/config文件

    git config --global user.name "pyyu"  配置当前linux用户全局用户名,这台机器所有git仓库都会用这个配置

    git config --global user.email "yc_uuu@163.com" 配置当前linux用户全局邮箱

    git config --global color.ui true 配置git语法高亮显示

    git config --list 列出git能找到的所有配置,从不同的文件中读取所有结果

    git config user.name  列出git某一项配置

    git help 获取git帮助

    man git man手册

    git help config 获取config命令的手册

    三、git操作

    git工作流程

    使用git就是将本地文件(工作目录workspace)的文件,添加到暂存区(stage),然后提交到本地仓库(repository),最终可以协同开发,推送到远程仓库(remote)

    Git命令就是用于将文件改动切换到不同的空间来记录。

    git操作1、建立Git仓库

    git版本库,也叫做git仓库(repository),也就是一个文件夹。

    这个目录的所有内容被git软件管理,所有的修改,删除,git都会跟踪记录,便于可以跟踪历史记录,以后可以还原文件。

    两种场景需求:

    1.把已有的项目代码,纳入git管理

    cd mysite    mysite项目所在代码
    git init        初始化git仓库
    
    git init命令会创建一个.git隐藏子目录,这个目录包含初始化git仓库所有的核心文件。
    此步仅仅是初始化,此时项目里的代码还没有被git跟踪,因此还需要git add对项目文件跟踪,然后git commit提交到本地仓库

    想知道.git文件做了什么事,请看git原理 >Git 内部原理 

    2.新建一个项目,直接用git管理

    cd 某个文件夹
    git init mysite      此步会在当前路径创建mysite文件夹,mysite文件夹中包含了.git的初始化文件夹,所有配置

    那么.git文件夹中有什么呢?

    [root@pyyuc ~/git_learning/mysite 11:08:19]#tree .git
    .git
    ├── branches
    ├── config    这个项目独有的配置
    ├── description
    ├── HEAD    head文件指示目前被检出的分支
    ├── hooks  hooks目录包含服务端和客户端的钩子脚本 hook scripts
    │   ├── applypatch-msg.sample
    │   ├── commit-msg.sample
    │   ├── post-update.sample
    │   ├── pre-applypatch.sample
    │   ├── pre-commit.sample
    │   ├── prepare-commit-msg.sample
    │   ├── pre-push.sample
    │   ├── pre-rebase.sample
    │   └── update.sample
    ├── index  index文件保存暂存区的信息,只有git add之后才会生成,默认还没有这个文件
    ├── info    info目录是全局性排除文件,用于放置不想被记录在.gitignore文件中的忽略模式(ignored patterns)
    │   └── exclude
    ├── objects  存储所有数据内容
    │   ├── info
    │   └── pack
    └── refs  refs目录存储指向数据(分支)的提交对象的指针
        ├── heads
        └── tags
    .git文件夹解析

    3.获取远程仓库代码

    如果你想获取github上的代码,或者你公司gitlab私有仓库的代码,可以使用git clone命令,下载克隆远程仓库的代码。

    git clone https://github.com/django/django.git

    你会发现所有的项目文件都在这里,等待后续开发。

    git操作2、记录更新到本地仓库

    还记得git的四个区域吗?本地文件夹,暂存区,本地仓库,远程仓库吗?
    
    本地文件夹未初始化,git是不认识的
    
    本地文件git init后,就成了git仓库

    请记住,在工作文件夹的每一个文件,只有两种状态,一个是未跟踪,一个是已跟踪

    已跟踪的指的是已经被纳入git版本管理的文件,在git快照中有他的记录

    未跟踪的是这个文件既不在git快照中,也不在暂存区

    git init初始化时的工作文件夹,都属于已跟踪了,后续的编辑操作都会标记为,已修改文件,因此需要将修改后的文件,加入暂存区,然后提交暂存区的文件

    检查文件状态

    git status 
    此命令查看git工作目录的文件,处于生命周期的哪一个状态 注意,只能在git工作目录中输入这个命令,他会去找.git文件夹 
    第一次输入git status会看到此状态,没有任何东西需要提交
    [root@pyyuc ~/git_learning/mysite 12:00:34]#git status
    # On branch master
    #
    # Initial commit
    #
    nothing to commit (create/copy files and use "git add" to track)

    说明当前工作目录很干净,所有的已跟踪文件,已经被提交且未更改。
    此时处在master默认分支。

    git生命周期演练

    git init mysite                          初始化git仓库
    
    git status                                 查看git状态
    
    echo 'print("挣了一个亿")' > main.py        新建一个代码文件,此时是未被git跟踪的
    
    git status                                查看状态
    
        On branch master
    
        No commits yet
    
        Untracked files:
          (use "git add <file>..." to include in what will be committed)
    
            main.py
    
        nothing added to commit but untracked files present (use "git add" to track)

    git add main.py  开始跟踪main.py文件

    git status   此时再看已经被跟踪,现在已是可以被提交的状态,此时处于暂存区

    git commit -m "echo main.py" 告诉git,把暂存区的main.py提交到本地仓库

    git log     查看刚才的commit记录

    给文件重命名

    我们还是在git版本库中操作
    修改main.py为mymain.py
    mv main.py  mymain.py
    查看状态
    git status

    直接mv的操作,会被git记录为两个形容,一、删除原有文件、二、新建了mymain.py文件
    此时新文件还未被跟踪,需要git add , git commit
    原本的main.py还需要从暂存区删除
    [root@pyyuc
    ~/mysite 14:57:57]#git status # On branch master # Changes not staged for commit: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: main.py # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # mymain.py no changes added to commit (use "git add" and/or "git commit -a")

    git rm main.py  删除暂存区的main.py

    git commit -m "mv mymain.py"  提交新的mymain.py

    这样的步骤很麻烦,可以直接git mv 命令即可

    刚才的mv记录,可以通过git log查看历史记录,已经提交的id

    可以通过git reset 回退历史版本,回退到改名之前

    [root@pyyuc ~/mysite 15:10:12]#git log
    commit f60fa7f1312843aa57edc9464192c9d891f23fb5
    Author: pyyu <yc_uuu@163.com>
    Date:   Sat Dec 22 15:08:02 2018 +0800
    
        mv mymain.py
    
    commit 65e0a2239909fd5aabc5928ec4431de3f163a195
    Author: pyyu <yc_uuu@163.com>
    Date:   Sat Dec 22 14:51:07 2018 +0800
    
        echo main.py
    
    
    回退到上一次commit版本,(注意这个命令,很危险,慎用)
    git reset --hard 65e0a2239909fd5aabc5928ec4431de3f163a195 
    --hard 清空暂存区和工作目录资料

    改名最正确的方式

    git mv main.py mymain.py  
    
    git commit -m "mv mymain.py"

    查看git版本历史

    在我们使用git的时候,会对代码文件不停的修改,不断的提交到代码仓库。

    这个就如同我们打游戏时候,保存关卡记录的操作。在打boss之前,先做一个存档,防止被boss一招秒杀,又得从头再来。。。。。

    因此被boss弄死,可以从存档,重新开始游戏。。。。

    Git也是一样当你的代码写好了一部分功能,就可以保存一个"存档",这个存档操作就是git commit,如果代码出错,可以随时回到"存档"记录

    查看"存档"记录,查看commit提交记录的命令 git log

    git log命令显示,从最新的commit记录到最远的记录顺序。

    git log --oneline    一行显示git记录
    git log --oneline  --all  一行显示所有分支git记录
    git log --oneline --all -4 --graph 显示所有分支的版本演进的最近4条
    git log -4  显示最近4条记录
    git log --all     显示所有分支的commit信息
    
    
    
    
    git branch -v 查看分支信息
    git help --web log 以web界面显示log的参数

    git版本回退,回到过去

    git log可以查看历史版本记录
    git reset --hard命令可以回退版本
    git reset --hard HEAD^ 回退到上个版本
    HEAD表示当前版版本
    HEAD^表示上个版本
    HEAD^^上上个版本

    也可以直接git reset --hard 版本id号

     

    git穿梭未来

    当你发现你git reset --hard回退错了。。。怎么办?别怕git reflog 记录了你每一次命令

    git reflog
    80f9496 HEAD@{1}: reset: moving to HEAD^
    b7a8740 (HEAD -> master) HEAD@{2}: commit: echo 123
    80f9496 HEAD@{3}: commit: echo my.txt
    bf5879e HEAD@{4}: commit (initial): echo my.txt

    我想回到某一个点,可以再次git reset --hard 版本id

    git工作区

    在我们进行git init mygit初始化一个git项目时,这个mygit文件夹,就是一个工作区(working Directory)

    yudanL-2:mygit root# pwd
    /data/mygit
    yudanL-2:mygit root# ls
    .git    my.txt

    git仓库

    工作区里有一个.git隐藏文件夹,就是git的本地仓库

    .git文件夹里有一个index文件,就是git的暂存区,也叫做stage

    .git文件夹里的HEAD文件就是git的一个指针

    原理图

    git记录的是工作区的修改记录

    撤销修改记录,只能在未提交到暂存区之前 

    git status
    git checkout -- my.txt 放弃工作区的修改操作

    如果你修改了文件,还添加到了暂存区 git add,那么只能撤销暂存区的操作,再撤销修改记录

    git status    
    git reset HEAD readme.txt  撤销暂存区的修改,unstage操作
    git checkout -- readme.txt

    git删除文件与恢复文件

    如果你直接在工作区删除文件,动作会被git记录
    rm -rf my.txt    删除了工作区的文件,git仓库还有记录
    git status    查看状态,可以检测到my.txt被删除
    
    如果确认文件无用,可以commit到git仓库
    git rm "my.txt"
    git commit -m "remove my.txt"

    如果你想恢复文件,可以通过git仓库的代码,替换工作区的代码

    rm -rf my.txt
    git checkout -- my.txt

    git stash

    保存当前暂存区和工作区的改动存储起来,执行完毕git stash之后,再次运行git status就会发现当前已是个干净的工作区,通过git stash list查看结果

    命令整理

    git stash 保存暂存区,工作区进度
    
    git stash list 查看stash保存的列表以及id
    
    git stash pop  恢复最新的stash进度到工作区
    
    git stash pop stash_id  恢复指定的stash进度
    
    git stash clear 清空所有存储的stash进度
    
    git stash drop stash_id  删除一个存储的stash进度

    git stash apply 恢复stash存储,且不删除stash list中的记录

    git stash实际用法

    git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
    比如下面的中间状态,通过git stash命令推送一个新的储藏,当前的工作目录就干净了。

    [root@yugo mydjango]# ls
    manage.py  mydjango
    #比如我临时想新建一个app01,进行开发,但是突然开发到一半,线上代码出bug了,我得立即去修复,我希望能临时存储一下,我目前的修改操作,bug完毕了,再找回来继续开发
    [root@yugo mydjango]# django-admin startapp app01
    [root@yugo mydjango]#
    [root@yugo mydjango]#
    [root@yugo mydjango]# git add .
    [root@yugo mydjango]# git status # On branch master # Changes to be committed: # (use
    "git reset HEAD <file>..." to unstage) # # new file: app01/__init__.py # new file: app01/admin.py # new file: app01/apps.py # new file: app01/migrations/__init__.py # new file: app01/models.py # new file: app01/tests.py # new file: app01/views.py # [root@yugo mydjango]# [root@yugo mydjango]# [root@yugo mydjango]# git stash Saved working directory and index state WIP on master: b16ccc0 v1 mydjango HEAD is now at b16ccc0 v1 mydjango
    #此时app01被放入暂存区,看不到了 [root@yugo mydjango]# ls manage.py mydjango

    #这里应该使用 git stash save 存储名
    git stash save "my app01 stash"

    找回stash

    [root@yugo mydjango]# ls
    manage.py  mydjango
    [root@yugo mydjango]# git stash pop # On branch master # Changes to be committed: # (use
    "git reset HEAD <file>..." to unstage) # # new file: app01/__init__.py # new file: app01/admin.py # new file: app01/apps.py # new file: app01/migrations/__init__.py # new file: app01/models.py # new file: app01/tests.py # new file: app01/views.py # Dropped refs/stash@{0} (5758c689354a34a168063a5bfa5d4bb3ca291f3b)
    [root@yugo mydjango]# ls app01 manage.py mydjango

    查看stash列表

    [root@yugo mydjango]# git stash list
    stash@{0}: WIP on master: b16ccc0 v1 mydjango

    移除stash

    默认删除第一个stash
    [root@yugo mydjango]# git stash drop
    Dropped refs/stash@{0} (8af1c158977d5fe8bd398561ad8777514f8d22d1)

    四、git分支

    自己的分支别人看不到,当代码写完后,合并到master主分支上,这样既保证主代码的安全,又能协同开发,互不影响。

    git分支实战

    git branch 分支名linux     创建分支linux
    git checkout 分支名linux    切换分支到linux
    git branch    查看当前分支情况,在哪一个就有*符
    git check -- filename 一键还原文件,将git仓库的文件覆盖当前文件,危险命令
    git checkout -b name  创建+切换新的分支
    练习 创建linux分支,提交代码 git branch linux git checkout linux touch first.py git add first.py git commit
    -m “fenzhi linux commit v1” 此时切换回master分支,发现没有first.py文件 自动合并分支到master git checkout master git branch git merge linux 合并linux分支到master分支 合并完最好删掉无用的分支 git branch -d linux 自动合并可能会出现冲突报错,需手动解决冲突,解决自己想要的内容 对同名同目录的同一个文件操作,修改同一行数据就会冲突 git checkout master echo “master” >> readme git commit -a -m “master commit “ 提交代码到master仓库 切换到linux分支,此时已经看不到master主干的代码修改 git checkout linux echo “linux” >> readme git commit -a -m "linux commit” git checkout master 此时查看文件内容,应该只有master,并没有linux git merge linux 合并linux分支的代码,发现有一行冲突(both modified),
    master与linux字符串,手动修改后重新提交
    git commit
    -a -m "master merge commit” 提交本地代码到代码仓库
    当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
    
    解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
    
    用git log --graph命令可以看到分支合并图。

    五、gitlab

    交互数据的方式

    • 使用github或者码云等公有代码仓库,托管代码的地方,谁都可以看
    • 公司内部使用gitlab私有仓库

    github和gitlab的区别

    • github国外公共仓库不安全,国内的码云代码仓库,可能会暴露自己公司代码机密,等着被开除吧。。
    • 自建gitlab私有代码仓库,更加安装

    安装配置gitlab

    安装gitlab的命令

    我们是要在centos7上安装配置gitlab
    建议库容服务器配置,gitlab占用资源很多,最少4G内存虚拟机
    
    通过清华源配置gitlab,加速下载
    清华大学开源镜像站
    https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/
    配置步骤
    touch /etc/yum.repos.d/gitlab-ce.repo
    下入如下内容
    [gitlab-ce]
    name=Gitlab CE Repository
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
    gpgcheck=0
    enabled=1
    生成yum源缓存
    
    安装gitlab-ce
    sudo yum makecache
    sudo yum install gitlab-ce 
    gitlab-ctl reconfigure 初始化gitlab,只能执行一次
    gitlab-ctl status/stop/start    启动gitlab
    gitlab-ctl status
    通过浏览器访问页面服务器ip,默认开启了nginx的web端口,设置初始密码,操作类似github
    第一次访问会设置新密码 redhat123
    登录root
    密码redhat123
    即可看到gitlab 

    安装访问gitlab可能出现的问题

    如果初始化报错,有关编码问题,修改字符编码
    解决:在 ~/.bash_profile, 然后source ~/.bash_profile
    export LC_ALL="zh_CN.UTF-8"
    export LC_CTYPE="zh_CN.UTF-8"

    检查gitlab安装

    gitlab-ce一键安装后可以利用rpm -ql gitlab-ce查询其文件安装路径及相关文件路径,其默认安装路径为/opt/gitlab/、程序数据及配置文件保存路径为/var/opt/gitlab下。
    相关默认位置
    
    代码仓库保存位置:/var/opt/gitlab/git-data/repositories/
    代码仓库备份位置:/var/opt/gitlab/backups/
    postgresql数据及配置目录:/var/opt/gitlab/postgresql/data/
    redis默认配置目录:/var/opt/gitlab/redis
    gitlab主要配置文件:/etc/gitlab/gitlab.rb

    配置gitlab服务器,便于外接访问

    编辑/etc/gitlab/gitlab.rb
    修改gitlab运行外部URL默认的访问地址
    
    # 未修gitlab.rb配置文件中nginx配置时这个配置默认配置gitlab自带的nginx端口
    可以通过修改如下参数,也就访问的gitlab地址 external_url
    'http://172.17.17.10:81' 2.通过官网手册安装gitlab https://about.gitlab.com/install/#centos-7

    在linux服务器上配置ssh秘钥

    ssh-keygen    一路回车
    查看公钥文件,放到gitlab
    cat /root/.ssh/id_rsa.pub

    -

    -

    -

    -

    gitlab代码下载/推送实战

    创建新的仓库,下载gitlab仓库
    git clone git@192.168.119.12:root/oldboypython.git        克隆下载远端仓库
    cd oldboypython    进入仓库文件夹
    touch README.md    新建一个测试文件
    git add README.md    提交到暂存区
    git commit -m "add README”    提交暂存区文件到本地仓库
    git push -u origin master    推送到远端master主干仓库    origin是远程仓库地址
    
    也可以在远端gitlab web界面修改代码,提交后,在本地pull新代码
    (在git仓库中直接)    git pull
    
    git remote show origin 查看远程服务器信息  orgin是在创建仓库时定义在.git/config配置文件中的

    六、github

    创建git仓库

    第二步 填写仓库信息

    添加readme文件

    添加想要忽略的文件 .gitignore文件,例如.pyc等文件 

    第三步,创建ok

    添加ssh用户

    某台机器想要和github的仓库交互,需要提交这台机器的ssh公钥,添加到github账户

    步骤1

    步骤2

    添加ssh公钥

    步骤3

    填写ssh公钥

    这里得先在linux机器上,生成ssh公钥

    yugoMBP:~ yuchao$ ssh-keygen    一路回车,就行
    会生成一对公私钥
    
    yugoMBP:.ssh yuchao$ ls
    id_rsa    id_rsa.pub    known_hosts
    
    id_rsa是私钥,自己保留
    id_rsa.pub是公钥,发送给别人

    填写如下公钥信息即可

    如图添加完毕

    以上事情,公司中一般是运维或者项目经理来添加

    推送本地项目到github

    主干master代码
    [root@VM_32_137_centos mydj11]# git remote add origin git@github.com:ayuchao/s15oldboy.git  #为github远程地址起一个别名origin
    [root@VM_32_137_centos mydj11]# git pull origin master #下载远程仓库代码,合并本地master分支
    [root@VM_32_137_centos mydj11]# git push origin master  #推送本地master分支的代码,以及版本信息,到远程github的master分支
    此时可以在github查看代码啦
    
    分支xiaofeng
    echo "我是萧峰,降龙十八掌掌门人" >> xiaofeng.txt
    git add .
    git commit -m 'xiaofeng提交了txt文本'
    git branch
    git push origin xiaofeng
    此时github远程多了一个新分支,xiaofeng,代码也在里面了

    新入职,新电脑,怎么下载代码?

    此时我是新电脑,啥也没有
    git clone git@github.com:ayuchao/s15oldboy.git  #下载github的项目
    
    #下载的代码如下
    [root@VM_32_137_centos s15oldboy]# pwd
    /opt/s15oldboy
    [root@VM_32_137_centos s15oldboy]# ls
    app01  app02  db.sqlite3  manage.py  mydj11  qiong.txt  README.md
    
    #默认获取的只有master分支
    [root@VM_32_137_centos s15oldboy]# git branch
    * master
    
    #创建新的分支,并且和远程dev分支同步,注意确保远程github有dev分支,没有就提前创建好,创建好以后  git pull origin
    [root@VM_32_137_centos s15oldboy]# git branch dev origin/dev
    分支 dev 设置为跟踪来自 origin 的远程分支 dev。
    
    [root@VM_32_137_centos s15oldboy]# git checkout dev
    切换到分支 'dev'
    
    #开始在dev分支下写新代码
    [root@VM_32_137_centos s15oldboy]# echo "我是dev分支,我开发了一个贼nb的功能" >> daima.py
    [root@VM_32_137_centos s15oldboy]# git add .
    [root@VM_32_137_centos s15oldboy]# git commit -m "我是dev,提交了新功能daima.py"
    
    #提交dev分支内容到远程github托管的dev分支,可以去github检查代码
    git push origin dev  
    
    #合并dev分支的代码到master主干上,注意此时还是呆在dev分支下
    git checkout master
    git status
    git merge dev
    git push origin master  #推送master代码,远程github代码已经更新

    在github创建新的分支dev,如图

    克隆一个git仓库

    git clone git@github.com:ayuchao/oldboyPython.git  #这一步下载远程git仓库到本地

    实战git分支推送代码

    创建git 分支 并且切换分支
    git checkout -b  chaoge
    
    开始写代码views.py
    
    新文件views.py开始追踪
    git add .
    
    提交暂存区的代码views.py到本地仓库
    git commit -m "分支提交了代码views.py"

    推送本地提交到远程仓库github

    git push origin 分支名    ,如果远程分支不存在,github会创建一个分支
    
    yugoMBP:oldboyPython yuchao$ git push origin chaoge
    Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
    Enumerating objects: 4, done.
    Counting objects: 100% (4/4), done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 361 bytes | 361.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: 
    remote: Create a pull request for 'chaoge' on GitHub by visiting:
    remote: https://github.com/ayuchao/oldboyPython/pull/new/chaoge
    remote:
    To github.com:ayuchao/oldboyPython.git
    * [new branch] chaoge -> chaoge

    检查github的分支情况

     

    下一步

    将本地分支跟踪github分支

    使用git在本地新建一个分支后,需要做远程分支关联。

    如果没有关联,git会在下面的操作中提示你显示的添加关联。

    关联目的是在执行git pull, git push操作时就不需要指定对应的远程分支,你只要没有显示指定,git pull的时候,就会提示你。

    解决方法就是按照提示添加一下呗:

    git branch --set-upstream-to=origin/远程分支名称 本地分支名称
    
    git branch --set-upstream-to=origin/chaoge chaoge

    从远程github拖取代码

    在本地添加新的代码功能

    vim views.py #写入新的代码功能
    
    代码写完,添加文件到暂存区,再提交到本地仓库
    git add .
    git commit -m "添加日韩功能"
    
    git status #查看状态,git会提示你可以git push到远程某一个分支
    
    #因为咱们已经绑定了远程分支,因此直接git push
    git push

    Enumerating objects: 5, done.
    Counting objects: 100% (5/5), done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 346 bytes | 346.00 KiB/s, done.
    Total 3 (delta 1), reused 0 (delta 0)
    remote: Resolving deltas: 100% (1/1), completed with 1 local object.
    To github.com:ayuchao/oldboyPython.git
    1344bc5..a1e66cb chaoge -> chaoge

    #推送本地代码
    git push
    #查看远程分支信息

    从远程仓库下载代码

    git pull origin 分支名称  
    
    git pull origin chaoge    #从远程分支chaoge上下载代码,并且合并到本地所在的分支

    也可以在github上修改代码文件,然后在本地 git pull 查看代码变化

     

    工作中使用git流程

    运维或者技术老大,选择使用github还是gitlab,配置git仓库

    公司里的小弟们,在自己的电脑上,ssh-keygen生成公钥,然后把公钥发送给技术老大,然后老大会添加你的公钥到gitlab服务器上。

    技术老大会给小弟们,一个公司项目的克隆地址,小弟们就自己git clone下载代码把!

    小弟们的日常:

    小弟们在自己笔记本创建dev分支,在dev分支中进行自己那一部分的开发

    每一个小弟在开发完毕自己代码之后,推送到远程的dev分支

    远程分支一般有俩
    
    master分支:   保存线上的项目代码
    
    dev分支:      保存正在开发中的代码

  • 相关阅读:
    禁止 git 自动转换换行符
    一个单元测试问题的解决
    关于脏读、幻象读、不可重复读的理解
    PKCS7 的 attached 和 detached 方式的数字签名
    关于DES加密中的 DESede/CBC/PKCS5Padding
    解决grep的结果无法显示文件名的问题
    解决64位操作系统下运行psql的问题
    一个用于将sql脚本转换成实体类的js代码
    批量将代码中的 get_XXX 替换成 XXX
    关于数据库中密码的存储
  • 原文地址:https://www.cnblogs.com/bubu99/p/11961062.html
Copyright © 2020-2023  润新知