zoukankan      html  css  js  c++  java
  • Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别



    Git安装配置及常用命令

    1. 官网下载安装包,手动完成安装。
    2. 打开Git Bash命令行工具,执行命令ssh-keygen -t rsa -C Email-Addresss生成一个密钥对。
    3. 登录到GitLab,点击右上角你的用户头像,点击Edit Profile settings,点击SSH Keys,点击Add SSH Key,填写Title栏,复制用户目录下.ssh/id_rsa.pub文件的内容到Key,点击Add Key
    4. 点击右上角的New project,填写完成后点击Create project新建一个仓库,点击Activity,点击SSH后复制SSH边上栏里的地址。
    5. 打开Git Bash命令行工具,切换到一个合适的目录,使用命令git clone '刚才复制的URL'克隆创建的仓库。
    6. 进入目录cd 仓库名,执行命令
      git config --global user.email your-email,设置你的邮箱
      git config --global user.name your-name,设置你的姓名。
    7. 执行命令:
      echo "# Description" > README.md,添加一个文件
      git status,查看当前状态,发现有未跟踪文件
      git add .,当前目录所有文件添加到暂存区
      git diff,比较当前工作区和暂存区有何不同
      git status,查看当前状态,发现有文件未提交
      git commit -m "注释",把暂存区内容提交到本地仓库
      git push -u origin master,把本地仓库的提交推送到远程仓库
      git log,查看提交日志
    8. 模拟远程更新
      登录到GitLab,点击Files标签,点击README.md文件,点击Edit按钮修改文件内容,添加新行:”* 远程修改文件记录”,可以点击Preview预览,也可以填写注释后直接保存。
    9. 执行命令:
      git pull,拉取远程仓库的更新提交,并做自动合并,可能会出现冲突
      git fetch,获得远程仓库的更新提交,不做自动合并,需要手动合并
      git merge origin/master,把远程更新提交手动合并到本地master分支
    10. 配置命令别名
      git config --global alias.co checkout,配置检出命令别名
      git config --global alias.br branch,配置分支命令别名
      git config --global alias.ci commit,配置提交命令别名
      git config --global alias.st status,配置当前状态命令别名
      git config --global alias.df diff,配置比较命令别名
      git config --global alias.pl pull,配置拉取命令别名
      git config --global alias.pu push,配置推送命令别名
      git config --list,查看配置列表
      git config --global credential.helper store,配置记住密码,以HTTPS使用时
    11. 其它命令
      git clean -f,清空未跟踪文件
      git checkout .,清空工作区改动
      git checkout some-branch-name file-name.js,检出指定分支的指定文件
      git checkout {{some-commit-hash}} file-name.js,检出指定提交的指定文件
    12. 其它
    • Git管理大项目一段时间后会比较慢,可以使用git gc命令清理一下
    • Git不管理空目录,如果本地有空目录,则始终不会提交到仓库中
    • Git会根据文件的相似性自动识别重命令名操作,底层其实也是先delete后add
    • 可在.git同级目录添加.gitignore文件,文件中可写入忽略文件信息,查看状态和提交时均会自动忽略
    • 1.7版好像支持了像svn那样只检出部分目录的功能,详细请移步官网文档,另附Git稀疏检出教程一例
    • 推荐官方书籍:Pro Git
    • 官方手册地址请戳我,注:git help 'command'显示的就是官方手册Manual Page.
    • 还有一些其它功能,比如:rebase, rm, reset, remote, blame, cherry-pick, mergetool, difftool等本教程还没涉及,以后会逐步更新

    Git本地分支管理

    1. 分支的创建、合并、删除、比较
      git branch,显示所有分支
      git branch b1,从当前分支创建一个叫b1的分支
      git checkout b1,切换到b1分支
      git checkout -b b1,相当于以上两条命令的组合
      git checkout master,切换到master主分支
      git merge b1,把b1分支的代码合并到master上
      git branch -d b1,删除b1分支,不能在被删除分支上执行
      git diff branch-1 branch-2,比较两个分支的不同
      git diff --name-only branch-1 branch-2,只显示两分支不同的文件的名称
      git diff some-branch some-filename.js,比较当前分支与另一分支指定文件

    Git远程分支管理

    1. 远程分支的创建、合并、删除
      git push origin dev,将本地分支dev推送到origin远程仓库
      git pull origin dev,拉取远程仓库origin的dev分支并自动合并
      git push orgin :dev,删除远程仓库origin上的远程分支
      git push origin --delete dev,1.7版之后可以使用这个命令。
      git remote prune origin,清理本地的跟踪分支,可加—dry-run参数假执行一下
      git pull --rebase,以变基的形式拉取更新

    Tips : tag的远程管理类似远程分支管理


    Git Tag标签管理

    1. 标签的创建、删除
      git tag t1,从当前分支创建一个名为t1的标签
      git tag -m '注释' t1,创建一个带有注释的标签
      git tag -d t1,删除名为t1的标签

    Git Log日志

    git log,查看历史日志
    git log --graph,以基于文本的图形显示合并轨迹
    git log --pretty=oneline,一行显示日志简要信息
    git log --pretty=format:"%h - %an, %ar : %s",以指定格式查看日志,format参数请移步官方手册
    git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges,以指定格式显示指定日期区间和指定提交者的日志,不含合并提交
    git log -p -2 --stat,-p显示文件差异,-2显示最近两次提交,—stat显示修改行数统计信息
    git log -p filename,查看文件的详细变更,包括文件的实际修改内容
    git log -L 1,1:some-file.txt,查看文件中指定位置的变更
    git log --no-merges master..,查看尚未合并到master分支的变更


    其它高级命令

    git show --no-merges master..,功能同上
    git show some-branch:some-file.js,查看其它分支的文件,无需切换分支

    常规使用及介绍

    角色权限

    角色 权限 备注
    Owner 项目所有者,拥有所有的操作权限 最高权限
    Master 项目的管理者,除更改、删除项目元信息外其它操作均可 负责master等受保护分支的merge工作等
    Developer 项目的开发人员,做一些开发工作,对受保护内容无权限 可以创建远程分支,创建merge请求, 接受merge请求?
    Reporter 项目的报告者,只有项目的读权限,可以创建代码片断 不能创建远程分支, 创建merge请求?
    Guest 项目的游客,只能提交问题和评论内容 只能issue等

    具体请看官方文档:https://docs.gitlab.com/ee/user/permissions.html


    分支定义

    分支名称 定义 人员 环境 保护分支 稳定分支
    master 主分支 顶级负责人Master 生产环境
    r-预发布版本号 预发布分支 顶级负责人Master 预发布环境
    dev 开发分支 项目负责人Master 测试环境
    b-BUG编号 Bug修复分支 开发者Developer 测试环境
    f-特性名称 特性分支 开发者Developer 开发环境
    f-特性名称-coder 特性分支-开发者 开发者Developer 开发环境
    t-发布版本号 发布版本标签 all all

    一般使用方法

    1. 克隆

    git clone <仓库地址>

    2. 查看所有分支

    git branch -a
    # 查看是否有origin/dev分支,服务器默认已建立dev分支,如果没有,则请Master角色先建立该分支:
    # 方法1:clone版本哭,新建本地dev分支并push到服务器:git clone ; git branch dev ; git checkout dev ; git push。
    # 方法2:直接在gilab上建立dev分支
    

    3. 切换到dev分支

    git checkout dev    #--- 可能是git checkout -b dev origin/dev,建立进入分支,并关联
    

    4. 基于dev分支创建自己的分支<分支名称>

    git checkout dev
    git branch  <分支名称>
    

    5. 切换到<分支名称>,然后愉快的coding

    git checkout  <分支名称>
    

    yuan

    6. 加到暂存区

    git add ./
    

    7. 可随时检查工作区状态

    # 查看当前分支工作区是否有未跟踪的文件(即是否有未添加到暂存区的文件)
    git status
    # 查看当前分支工作区的文件与暂存区文件的差异
    git diff
    

    8. 提交到本地仓库

    git commit -m "说明"
    

    9. 推送到服务器仓库

    也可以不推送到服务器,只放在本地仓库,例如仅本人使用的临时分支

    git push --set-upstream origin <分支名称>     #--- 设置关联,也会顺便推送,仅在第一次时用
    git push origin
    

    10. 合并到dev分支(例)

    A. Developer在网页上请求合并(推荐)

    网页上请求合并还可以顺便进行代码审查,里程碑设置等
    参考:
    gitlab如何实现代码评审机制(通过角色管理控制): http://www.jianshu.com/p/adb598c52e84


    如果出现冲突,开发人员将服务器最新的版本pull下来,然后将dev分支合并到自己的分支

    git pull
    git checkout  <分支名称>
    git merge --no-ff  dev
    

    如果有冲突,则参照上面的参考链接解决,或直接按【B. Master角色直接本地合并】中的方法解决

    B. Master角色直接本地合并

    dev是保护分支,只有Master角色(例,看设置的分支保护权限)才有权限进行合并
    将本地分支<分支名称>合并到本地dev分支,必须先从服务器pull最新代码,并切换到dev分支,然后再合并:

    git pull  <仓库地址>
    git checkout dev
    git merge --no-ff <分支名称>
    

    运行merge命令之后,如果有冲突,则需要手动解决冲突,打开冲突文件,你可以看到类似:

    。。。
    111
    <<<<<<< HEAD
    222 master do it
    =======
    222 source do it
    333 source jjj
    >>>>>>> <分支名称>
    。。。
    

    将正确的留下,错误的删除即可,保存退出,然后重新(git add . ; git commit ; git merge ):

    git add .
    git commit -m "for merge说明"
    git merge --no-ff <分支名称>
    

    冲突时,也可以撤销合并:

    git merge --abort
    

    11. 删除分支,切换到master分支然后删除<分支名称>分支(不能删除当前分支)

    git checkout master
    git branch -d <分支名称>
    

    12. 删除远程,危险,切记只删除自己建立的分支,不要删除公共分支,例如dev、release等

    git push origin :<分支名称>
    

    GitLab介绍及常规使用

    GitLib有五种身份权限,分别是:

    • Owner 项目所有者,拥有所有的操作权限
    • Master 项目的管理者,除更改、删除项目元信息外其它操作均可
    • Developer 项目的开发人员,做一些开发工作,对受保护内容无权限
    • Reporter 项目的报告者,只有项目的读权限,可以创建代码片断
    • Guest 项目的游客,只能提交问题和评论内容

    具体参见GitLab权限,为项目添加成员时可指定成员的身份权限。


    命名规则

    • 每次提交必须写明注释,如果是修复Bug,请加上Bug号
    • 创建特性分支,名称要以f-开头,加上特性名
    • 创建发布分支,名称要以r-开头,加上预发布版本号
    • 创建Bug修复分支,名称要以b-开头,加上Bug号
    • 创建标签,名称要以t-开头,加上发布版本号
    • 合并分支时必须使用--no-ff参数(禁止以快进方式合并),以保留合并历史轨迹

    主要分支(保护分支)

    • master 主分支,稳定代码,为生产环境做准备的
    • develop 开发分支,为开发服务

    特性分支

    从develop分支创建,用于特性开发,完成后要合并回develop分支。
    操作过程:
    git checkout -b newfeature develop,从develop分支创建newfeature特性分支
    git checkout develop,开发完成后,需要合并回develop分支,先切换到develop分支
    git merge --no-ff newfeature,合并回develop分支,必须加--no-ff参数
    git branch -d newfeature,删除特性分支
    git push origin develop,把合并后的develop分支推送到远程仓库


    发布分支

    从develop分支创建,用于预发布版本,允许小bug修复,完成后要合并回develop和master。
    操作过程:
    git checkou -b release-1.2 develop,创建一个发布分支
    git checkout master,切换到master分支,准备合并
    git merge --no-ff release-1.2,把release-1.2分支合并到master分支
    git tag 1.2,从master分支打一个标签
    git checkou develop,切换到develop分支,准备合并
    git merge --no-ff release-1.2,把release-1.2分支合并到develop分支
    git branch -d release-1.2,删除这个发布分支


    修复分支

    从master分支创建,用于生产环境上的Bug修复,完成后要合并回develop和master。
    操作过程:
    git checkout -b hotfix-1.2.1 master,从master分支创建一个Bug修复分支
    git checkout master,切换到master分支,准备合并
    git merge --no-ff hotfix-1.2.1,合并到master分支
    git tag 1.2.1,为master分支创建一个标签
    git checkout develop,切换到develop分支,准备合并
    git merge --no-ff hotfix-1.2.1,合并到develop分支
    git branch -d hotfix-1.2.1,删除hotfix-1.2.1分支

    区别git与svn

    开发者的本地?

    svn: 只有一个版本的代码
    git: 整个仓库的所有版本
    

    在没有网络的情况下, 开发还能不能进行版本控制

    svn: 不可以, svn没有自我版本控制的能力
    git: 可以的, git在本地就有一个仓库, 本地的版本控制
    

    最常用命令:

    svn: checkout/commit/update
    git: clone/add/commit/push/pull
    

    git/github的常用操作

    全局配置github用户名和邮箱

    git config --global user.name "用户名"  //配置用户名
    git config --global user.email "你的邮箱"  //配置邮箱
    git config --list  //查看配置列表
    

    生成一个本地仓库

    git init  //初始一个本地创建
    git clone url  //从远程克隆仓库到本地
    

    添加文件并提交

    git add *  //将工作区的变化添加到缓存区
    git commit -m "说明信息"  //将缓存区的变化提交到版本区
    git status  // 查看状态
    

    git在本地维护了3个区域

    工作区(working dir)
    缓存/暂存区(Index/Stage)     
    版本区(HEAD)
    

    push推送: 将本地仓库中的更新提交到远程仓库

    git remote add origin url  //关联本地仓库与远程仓库(1次)
    git push origin master  //将本地仓库的更新推送到远程仓库
    

    pull拉取

    git pull origin master  //拉取远程仓库的更新到本地仓库
    注意: 自动合并
    

    git管理真实项目

    1.添加忽略
        创建.gitignore文件
            vim .gitignore  //通过vim命令创建文件
            i  //进入编辑模式
            按esc  //进入查看模式
            ZZ  //保存并退出
        指定需要忽略的文件或文件夹
            /.idea  ##忽略当前目录下的此文件(夹)
            node_modules  ## 忽略任意目录下的此文件(夹)
    2.本地版本控制
        git add *
        git commit -m "xxx"
    3.创建github(远程)仓库
        New Repository
        VueSource
    4.推送到远程仓库
        git remote add origin https://github.com/zxfjd3g/VueSource.git
        git push origin master
    

    公司多人协同

    new organization
    查找小伙伴账号, 并添加
    修改组织成员的访问权限为: write
    向小伙伴发送organization名称/地址
    小伙伴登陆后访问organization的地址, 同意协作请求
    在组织下创建仓库, 所有小伙伴都可以对仓库进行clone/pull/push了
    

    开源项目多人协同

    用户A: 项目xxx
    用户B: 用户A的下一级或朋友, 没有权限直接向仓库xxx push代码
    B: 访问xxx主页, fork一个分支到B账户下
    B: clone=>修改代码==>commit==>push
    B: pull request: 向A提交一个pull的请求
    A: 接收到消息, 查看/diff/merge
    AB: 可以进行发信息交流
    

    git/github其它操作

    fetch拉取

    git fetch origin master:tmp
    git diff tmp   
    git merge tmp : 将tmp分支合并到当前分支
    需要手动合并后提交
    

    其它的命令:

    git log/reflog 
    git checkout commit_id <file.name> : 将指定文件回到指定版本
    git reset --hard HEAD  : 将整个工作区回到最新版本
    git reset --hard HEAD^ : 回到上一个版本
    

    在webstorm中使用git

    在settings中配置关联上git.exe
    使用git命令初始化本地仓库并与远程仓库关联
    通过version control视窗直接进行版本控制操作
    

    使用TortoiseGit

    安装TortoiseGit
    通过菜单进行git版本控制(不使用命令)
    使用git SSH
        利用TortoiseGit的PuTTY工具生成public Key, 并配置到github上
        生成private key并保存为一个ppk文件
        通过远程仓库的ssh地址clone, 并指定本地的ppk文件
    

    Git常规命令参考自:http://www.07net01.com/2015/04/827369.html
    结合 haroopad 玩 markdown模式编写 也不想象中的那么简单啊 …

  • 相关阅读:
    Python-S9—Day85-ORM项目实战之forms组件以及Modelform补充、跨域请求及应用
    Python-S9——Day84-ORM项目实战之权限、form以及modelform
    拦截导弹简单版
    Disease Manangement 疾病管理
    状压dp
    排列
    位运算笔记
    对拍
    机房vscode使用方法
    区间dp复习 之 tyvj 1198 矩阵连乘
  • 原文地址:https://www.cnblogs.com/ljx20180807/p/10334664.html
Copyright © 2011-2022 走看看