zoukankan      html  css  js  c++  java
  • Git看这篇就行了

    Git分布式版本控制工具

    每个人都拥有全部的代码!安全隐患!

    所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

    不会因为服务器损坏或者网络问题,造成不能工作的情况!

    一、Git配置

    • 所有的配置文件,其实都保存在本地!

      git config -list 查看所有配置项

    • 查看不同级别的配置文件:

      #查看系统config
      git config --system --list
        
      #查看当前用户(global)配置
      git config --global  --list
      
    • Git相关的配置文件:

      1)Gitetcgitconfig :Git 安装目录下的 gitconfig --system 系统级

      2)C:UsersAdministrator .gitconfig 只适用于当前登录用户的配置 --global 全局

    1.1 设置用户名与邮箱(用户标识,必要)

    当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

    git config --global user.name "Q-volcano"  #名称
    git config --global user.email 24736743@qq.com   #邮箱
    

    只需要做一次这个设置,如果你传递了--global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。总之--global为全局配置,不加为某个项目的特定配置。

    二、Git基本理论

    2.1 三个区域

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

    • Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
    • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
    • .git:存放Git管理信息的目录,初始化仓库的时候自动创建。

    2.2 工作流程

    git的工作流程一般是这样的

    1、在工作目录中添加、修改文件;

    2、将需要进行版本管理的文件放入暂存区域;

    3、将暂存区域的文件提交到git仓库。

    2.3 文件的4种状态

    版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

    • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
    • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
    • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
    • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

    2.4 查看文件状态

    上面说文件有4种状态,通过如下命令可以查看到文件的状态:

    #查看指定文件状态
    git status [filename]
    
    #查看所有文件状态
    git status
    
    # git add .                  添加所有文件到暂存区
    # git commit -m "消息内容"    提交暂存区中的内容到本地仓库 -m 提交信息
    

    2.5 忽略文件

    有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

    在主目录下建立".gitignore"文件,此文件有如下规则:

    1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
    2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
    3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
    4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
    5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
    #为注释
    *.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
    !lib.txt     #但lib.txt除外
    /temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
    build/       #忽略build/目录下的所有文件
    doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    

    三、Git基本操作命令

    3.1 创建仓库

    • 创建本地仓库(一般不用)一般情况直接在GitHub上创建仓库然后clone到本地仓库

      git init
      # 该命令执行完后会在当前目录生成一个 .git 目录。
      # 使用我们指定目录作为Git仓库。
      git init newrepo
      #初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
      
      git remote add <别名>  <url>  #添加一个新的远程仓
      
    • clone 远端仓库到本地仓 (常用)

      命令: git clone <repo>

      常见的几种写法

      git clone git@github.com:fsliurujie/test.git         --SSH协议
      git clone git://github.com/fsliurujie/test.git          --GIT协议
      git clone https://github.com/fsliurujie/test.git      --HTTPS协议
      
    • 推送本地到远程仓库

      git push <远程仓库地址> 分支名称

      git push <远程仓别名> 分支名称

      git push -u 远程仓库地址别名 分支名称

      ​ -u 记住推送地址及分支,下次推送只需要 git push

    3.2 基本命令

    菜鸟教程

    3.3 Git分支

    什么是分支?

    分支就像平行宇宙一样,你做你的,我干我的,一般分有3种类型,

    master分支, 最稳定

    develop分支,基于master分支创建的开发中的分支

    feature分支,基于develop创建的某个功能特征的分支

    在某个分支开发完毕后,可以合并到主分支,实现协同开发,互不干扰

    分支命令

    • git branch #查看分支

      git branch  #列出所有本地分支,打*号表示当前分支
      git branch -r #列出所有远程分支
      git branch -a #列出所有本地分支和远程分支
      
    • git branch <分支名> #创建分支

      git branch develop  #创建开发分支
      
    • git checkout <分支名> #切换分支

      git checkout develop 
      

      切换分支前记得git status ,若有需要commit的commit后再切换;

      切换不同的分支,文件会随之改变

    • git merge <分支名> # 合并分支

      # 按照顺序合并分支
      即  在 master 合并 develop
      	在 develop 合并 feature
      
    • git branch -d <分支名> #只能删除被合并的分支,如果没有的话,默认情况会报错

      git branch -D<分支名> #强制删除

    小技巧:

    在开发中,可以暂时提取分支上所有的改动存储,让开发人员得到一个干净的工作副本,临时转向其他工作。

    使用场景:分支临时切换

    • 存储临时改动:git stash
    • 恢复改动:git stash pop

    四、多人协作开发流程

    • A在本地创建本地仓
    • A在远端创建好仓库,编写好部分代码后 push 到远端
    • A 向 B发出 开发邀请 , B接受并让 A认证
    • B clone 远端仓库到本地
    • B 将本地仓库 push 到远端
    • A 将远端仓库 拉取 到本地 , 后续 B 一般也是拉取 远端到本地

    git clone 完全复制,只需要执行一次就可以

    git pull 是拉取远程仓库中最新的版本,前提是已经有了本地仓

    git pull <url > <branch>
    
    # 如果远程仓版本高于本地仓,则本地仓不能 push,必须先pull 拉取到最新版本 再push
    

    解决冲突

    在多人同时开发一个项目的时候,如果两个人修改了同一个文件的同一个地方,就会发生冲突,需要人为解决

    为什么有冲突?

    多个人同时推送,有先后关系,先推送的人能够推送上,后推送的人由于远程仓库版本高于本地仓,推送失败

    所以,后推送的 人需要将远程仓的高版本拉取到本地,拉取到本地发现修改的是同一个文件,即发生了冲突

    命令行会有提示,冲突的文件,我们要解决的就是打开 index.html 文件,然后查看冲突代码,修改成需要的

    此时 ,后推送的人修改完成后 git add git commit 到本地仓,再推送就能成功

    微团队合作

    为开源项目找 bug 并改进,然后推送给开源作者

    1. fork 到自己的远程仓库

    ​2. 从自己的远程仓 clone 到本地 开发

    1. 本地修复,改进后 推送到自己的远程仓

    2. 在 GitHub 上创建一个 pull Request请求

    3. 原作者 查看消息 同时可以回复 ,查看检查代码后,决定是否合并

    ssh 免密登入

    生成公私钥后

    设置本机绑定SSH公钥,实现免密码登录!

    #生成公钥
    ssh-keygen
    # 在 C:UserAdministator.ssh 目录中找到公钥代码复制到Github
    
    # 在本地添加远端仓库别名
    git remote add origin_ssh git@github.com:xxxxxxxx
    
    git push origin_ssh master
    
  • 相关阅读:
    css点滴3—5种方式实现圆环
    css点滴2—六种方式实现元素水平居中
    css点滴1—八种方式实现元素垂直居中
    当我们在讨论CQRS时,我们在讨论些神马?
    CSDN屏蔽广告
    手撸一套纯粹的CQRS实现
    【转】CAP 定理的含义
    【转】浅谈命令查询职责分离(CQRS)模式
    Castle DynamicProxy基本用法(AOP)
    【转】面向对象设计的SOLID原则
  • 原文地址:https://www.cnblogs.com/Qvolcano-blog/p/14491805.html
Copyright © 2011-2022 走看看