• Git--- Github


    Git基础

    什么是git?

    git是一个版本控制系统,也可以说当你的代码发生变化进行管理的工具.在git出现之前这样的工具SVN,CVS.

    git和github的区别,

    简单来说,git是一个版本控制的工具,github是一个代码托管平台,一个代码仓库.

    用git管理项目

    首先进入项目目录,启动git--->Git Bash Here,这样就开启了git管理系统启动了一个git图形界面,执行 $ git init . 初始化,在项目中便形成了一个.git的目录 然后通过一系列命令进行版本控制。

    注意:项目内容在没有被管理的时候status为红色,被管理后为绿色!

    #开始管理项目(基础3步走)
    
    git init .    #首先初始化,生成 .git目录
    
    git add .      #将整个项目管理起来
    
    git commit -m  "项目01版本"  #"项目的01版本"当然执行的时候可能会报错,需要配置下git config 
    
    """
    执行这两条命令配置邮箱和名称
    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    """

    git分区

    工作区: 项目中当前的编辑位置.

    缓存区:git add 之后的区域,将文件放在缓存区.

    版本库:commit之后的区域就是版本库.

    git常用命令

    git init .        # 初始化
    git add .      # 将工作区的所有文件添加到缓存区
    git commit -m “提交信息”   #将缓存区的内容添加到版本库,注意:"提交信息"写的越详细越好!方便后期管理
    git status                           #查看当前的状态
    
    git reset --hard  hash值     #回退到指定的版本,这里的hash值就是每次commit的时候都会生成一个类似md5值的字符串,例如 "9d2aaf3ea89a9e6b8d8050a6d1a730f6bb4a0d85"
    
    git checkout -- file(指定文件)        # 将文件回滚到最近一次提交的样子    该命令比较危险在不确认文件用途的时候慎用!!!
    
    
    git log                          # 查看当前位置之前的提交记录
    git log -p 文件       #指定版本库的区别
    git log pretty=online     #将commit过的值 版本库信息全部显示
    git log --pretty="format:%an %h %T %ar"   #格式化显示版本库信息  例如%an  作者名称  %h 用户简短hash值 %ar修订日期 %T树状显示
    
    git reflog                      #查看所有的记录(只要提交过的记录就能查到)
    
    git reset HEAD file      # 将文件从缓存区拉取到工作区
    
    git diff     对比文件                # 对比工作区和缓存区
    git diff --cached    对比文件      # 对比版本库和缓存区

    git-快照

    git stash    #将当前内容创建一个快照,并回到最后一次提交的位置,前提是有改变的情况下
    git stash list  #查看快照列表
    
    git stash pop  回到快照位置,并删除这个快照  相当于以下两条命令集合
    git stash apply   #回到快照
    git stash drop    #删除快照

    git-分支

    分支的作用就是用于团队协同开发,这样代码就会出现较大分歧。这时候就需要用到分支了,不同的任务组在不同的分支上开发,互相之间不会影响。git分支的特性和BUG修改都在不同的分支上进行开发和测试。这样规范了整个软件的开发流程。分支之间的互不影响这种特性可以增加团队合作的效率。GIT分支的另外一个重要特性就是可以合并不同软件仓库(fork)的分支。

    注意点:一般来说禁止在master分支上修改,因为master为线上代码,一旦出现问题,会产生严重的后果.基本上在dev分支上修改

    #分支的常用命令
    git branch  name   #创建一个分支
    git branch             #查看分支列表
    git checkout name   #切换分支
    git branch -d name   #删除指定分支
    
    git checkout -b name   #在当前分支的基础上 创建并切换一个分支
    
    git merge master bug    #将这两个分支合并

    冲突

    #下面这种情况就表示出现了冲突
    Auto-merging templates/car.html
    CONFLICT (content): Merge conflict in templates/car.html
    Automatic merge failed; fix conflicts and then commit the result.
    
    <<<<<<< HEAD
        <li>兰博基尼2/3</li>
    =======
        <li>兰博基尼1/2</li>
    >>>>>>> dev1

    Auto-merging templates/car.html
    CONFLICT (content): Merge conflict in templates/car.html
    The stash entry is kept in case you need it again.

     
    <<<<<<< Updated upstream
    <li>奇瑞瑞虎7</li>
    =======
    <li>奇瑞瑞虎</li>
    >>>>>>> Stashed changes

    #分支和dev1同时改动同一个文件相同的地方,合并的时候git无法处理,产生冲突,需要人为解决
    #创建快照之前,将li标签改为奇瑞瑞虎,当创建快照后然后在将li标签改为奇瑞瑞虎7,当执行删除快照 git stash pop 的时候就会产生冲突,需要手动选择解决

    Github托管代码

    将代码上传github

    1.先创建一个仓库,选择公开和私有随意.

    #上传操作
    git remote add origin https://github.com/liuxiaofei1071/shop.git     #将自己github url地址重命名为origin  
    git push origin master   #此时上传master分支代码到github的coco仓库 ,如果没登录Github就需要进行登录

    2.这样只能上传master分支,如果是多分支的话

    git push origin dev   #传dev分支到github
    
    git push origin dev1   #传dev分支到github

    将从github代码拉取到本地

    1.进入对应仓库,如我的 liuxiaofei1010/shop,点击Clone or download按钮,复制github上的项目url,在git中执行对应的命令

    #相关git命令
    git clone github的url      #该命令就可以将代码从github上拉取下来,但是仅限于master分支
    
    #拉取其他分支代码
    git checkout -b dev origin/dev   #拉取dev分支
    git checkout -b dev1 origin/dev1  #拉取dev1分支

    两台机器分别更改github代码

    #公司pc
    git pull origin dev1    #将dev1分支代码同步到机器dev1分支
    #修改后
    git push origin dev1   #将本地dev1分支代码同步到github的dev分支
    
    #home-pc
    操作同上..

    两台机器分别更改代码同一位置push异常

    #错误信息
    $ git push origin dev1
    To https://github.com/liuxiaofei1071/shop.git
     ! [rejected]        dev1 -> dev1 (fetch first)
    error: failed to push some refs to 'https://github.com/liuxiaofei1071/shop.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    
    #这就是所谓的提交冲突问题
    #严格按照公司规定
    1.每个人都用自己的分支,在自己的分支上提交
    2.合并分支的时候人都要在,各自对自己的代码负责
    3.完成一个小功能合并一次(2-3)
    4.一般组长来合并代码
    5.review
       组长
       带你的人
    解决提交冲突问题

     变基

    #作用就是将多台机器push后的分支由曲线变为一条直线
    
    git rebase   #变基  --鸡肋 --治疗强迫症 

    给别人贡献代码

    #加好友步骤
    1.进入对方github所在项目 -->settings --->Collaborators
    2.输入对方username 添加对方,等待对方email验证通过
    3.方式一 : 通过后进入对方项目,拿到对方项目url,通过git clone 克隆,本地修改
    3.方式二 : 个人用户下拉框 settings --->Organizations --> 新建一个组织 --->设置组织名称,邮箱 --->邀请成员 --->Continue --->Submit
    github加好友
    #给别人修改代码
    1. Fork --选择自己/创建的组织
    2. 本地进行修改即将改动的地方,
    3.new pull request
    4.等待对方确认即可
    贡献代码

    tags标签 

    一般在大项目开发完成或项目开发到一个里程碑的时候会打上标签

    #常用命令
    git tag -a v1.0 -m "标签信息"    #打造一个标签
    
    git tag   #查看标签
    
    git push origin --tags    #push到github
    
    git tag -d v1.0   #删除标签
    
    git push origin :refs/tags/v1.0   #推送一个空的标签

    忽略敏感信息 

    例如不想被别人看到的信息 db 

    #了解. gitignore文件

    Gitpython

    用python操作git

    安装模块 gitpython

    from git import Repo
    
    repo = Repo("PATH")
    
    repo.index.add()    #添加
    repo.index.commit()   #提交
    repo.index.checkout()    #回滚
    repo.index.reset(commit=hash5,head=True)
    
    repo.create_head()  #创建分支
    repo.create_tag()    #创建标签
    repo.branches()   #获取所有的分支
    
    r = git.Repo.clone_from(url,to_path)    #克隆
    r.remote()
    r.pull()
    r.push()
    
    g = git.Git(PATH)
    g.add()
    g.commit ("-m ")

     ...待续

  • 相关阅读:
    常用Docker命令
    Ubuntu16.04安裝最新Nvidia驱动
    (转)5分钟让你明白“软链接”和“硬链接”的区别
    Centos7 Zabbix3.2集群安装
    Kettle定时抽取两个库中的两个表到目标库SYS_OPLOG表
    Elasticsearch Java API—多条件查询(must)
    logstash采集tomcat日志、mysql错误日志
    让Logstash每次都从头读文件及常见问题
    logstash之multiline插件,匹配多行日志
    spring security积累
  • 原文地址:https://www.cnblogs.com/CrazySheldon1/p/10710382.html
Copyright © 2020-2023  润新知