GIT

GIT

GIT简单介绍

  • GIT:是一款开源的分布式版本控制工具

  • 在所有的分布式的版本控制工具中,git是最快、最简单、最流行的

  • git起源

    • 作者:Linux之父 ,Linux Benedict Torvalds,2005年
    • 开始Linux是用Bitkeeper管理的,开发git仅仅是为了辅助Linux内核的开发(管理源代码),10天的时间就把git写完了,第一次导入到git的代码大约有5000万行的代码
  • git现状

    • 在国外已经非常普及
    • 越来越多的开源项目已经转移到git上面
    • 比如:php
  • 其他版本控制工具

    • CVS

      • 最早的开源、免费的集中式版本控制工具
      • 自身设计有问题,会造成提交文件不完整,版本库莫名其妙的损害
    • SVN

      • 修正了CVS的一些稳定性问题,是目前用的最多的集中式版本控制工具
    • ClearCase

      • 收费的集中式版本控制工具,安装比Windows还大,运行比蜗牛还慢
      • 人傻钱多的公司,世界五百强
    • VSS

      • 微软的集中式版本控制工具,集成在Visual Studio中
      • 这个工具很好用,比Xcode相对智能
  • 集中式版本控制和分布式版本控制的区别

    • 集中式版本控制

      • 仓库放在服务器端
      • checkout获得仓库,commit提交
      • 不管有多少个终端,所有的操作都需要和服务器进行交互
      • 仓库是集中式的放到服务器上,做任何操作都需要连接上服务器,没有网络就不能连接了,在公司里面做开发,一般是局域网,只能在公司加班,在公司才能连接服务器,才能提交
    • 分布式版本控制

      • 可以把在自己的电脑理解成服务器
      • 共享仓库放在一个远程的服务器上的
      • 本地电脑上也有一个仓库,可以先把操作提交到本地的仓库,push /pull,操作的时候可以先不用连接上服务器,可以先提交到本地仓库,等有网络的时候,可以一次性提交到远程的服务器上
  • GIT和SVN对比
    • 速度:在很多情况下,git的速度远远比SVN块
    • 结构:SVN是集中式管理,git是分布式管理
    • 其他:
      • svn使用分支比较笨拙
      • git可以轻松拥有无限个分支
      • svn必须要联网才能正常工作
      • git支持本地版本控制工作
      • 旧版本的svn会在每一个目录放置一个.svn
      • git只会在根目录拥有一个.git
    • 工作流程
      • SVN
        • 服务器端
        • 客户端 checkout commit update
      • GIT
        • 共享版本库
        • 客户端
        • clone 下载到本地
        • 可以在本地修改,可以在本地提交commit,把本地的版本库提交到共享的版本库push
        • 获得最新的共享版本库信息pull
    • 最大的区别在于:在分布式下开发者可以本地提交,每个开发者机器上都有一个服务器的数据库

GIT的初始化和访问设置

  • 在本地初始化一个本地的git仓库
    • 本地创建一个文件夹GIT
    • GIT文件夹里新建文件夹
      • manager
        • demo初始化一个本地git仓库
        • cd 来到demo路径
        • git init
        • 生成了一个.git的隐藏的文件夹
  • 对该git仓库进行配置(用户名和邮箱)
    • 用户名 $ git config user.name "manager"
    • 邮箱 $ git config user.email "[email protected]"
    • 输入命令行
    • 打开config查看配置文件
  • 配置一个全局的用户名和邮箱
    • 系统里面会有很多仓库,使用全局的就不用每个仓库都设置
    • $ git config -- global user.name "xiaomage"
    • $ git config -- global user.email "[email protected]"
    • 打开.gitconfig

GIT仓库项目初始化操作

  • 项目经理创建一个文件main.m
    • $ touch main.m
  • 查看git状态
    • $ git status
    • 查看是否被git管理
    • 红色:表示该文件并没有被git仓库管理
  • 把main.m文件 提交到git仓库的暂缓区
    • 暂缓区的概念
    • $ git add main.m
  • 查看状态
    • $ git status
    • 绿色:表示该文件已经被添加到git的暂缓区中
    • 注意:文件的更改必须要先添加到暂缓区里面,才能从暂缓区提交
  • 先把main.m提交到本地的版本库中
    • $ git commit - m "注释" main.m
    • master:表示当前是主干
  • 修改文件的内容
    • echo "I am Main" >>main.m
    • cat main.m
  • 重新查看文件状态
    • $ git status
    • 红色:表示被修改modified,当前的修改,没有在暂缓区中
  • 把本地的修改提交到暂缓区中
    • $ git add main.m
  • 查看文件状态
  • 把暂缓区中的修改提交到本地的版本库中
    • $ git commit - m "修改了main文件"main.m
    • 一个文件被修改了,一个文件被插入
  • 结论:之前使用SVN的时候,只有新创建的文件才需要add操作,修改文件是不需要进行add操作的,但是在git中,不管是新创建文件,还是修改了某个文件都需要再做一次add操作,就是把修改提交到暂缓区

GIT工作原理

  • 工作区(working directory)
    • 仓库文件夹里除了.git目录以外的内容
  • 版本库(Repository)
    • .git目录,用于存储记录版本信息
    • 暂缓区(stage)
    • 分支(master):git自动创建的第一个分支
    • HEAD指针:用于指向当前分支
      • HEAD指向谁,谁就是当前的分支
  • git add 和git comit 原理
    • git add:把文件修改或者新添加的文件添加到暂缓区
    • git commit :把暂缓区的所有内容提交到当前分支

GIT起别名的操作

  • SVN简写
    • update - up
    • status - st
    • checkout - co
    • commit - ci
    • remove - rm
  • GIT
    • GIT里面没有简写
    • git -- help
    • git提供了更加强大的功能,可以重命名
    • $ git config alias.st "status"
      • 相当于status == st
    • $ git config alias.ci "commit"
      • commit == ci
    • $ git config alias.ci "commit - m"
      • commit - m == ci
    • 别名可以随便起,但是不能有中文
    • 起的别名在config配置文件里面
    • 上面配置的只是当前的仓库,在其他的仓库中这些简写是不可用的
    • 全局的别名
      • $ git config -- global alias.st "status"

GIT删除文件

  • cd
  • ls -la
  • 删除文件
    • 项目经理需要删除文件
      • $ git rm 文件名称1 文件名2
    • 删除操作在工作区里面进行的
  • 查看文件的状态,是绿色的
    • $ git status
    • 绿色:该修改已经被提交到暂缓区里面,不需要add操作
  • 把删除操作提交奥本地的版本库
    • $ git commit- m "删除文件"
    • 一个文件被修改,一个文件被删除

查看版本信息

  • SVN
    • log
  • GIT查看版本信息(基本版)
    • $ git log
    • :表示没有显示完全,按下箭头就可以查看后面的信息
    • 版本信息里有什么内容
      • 注释
      • 谁修改的
      • 什么时候修改的
      • commit bf78……后面的内容是版本号
        • 散列计算得到的,sha
        • 散列值是版本号
    • 按住Q退出
  • CIT查看版本信息(加强版)
    • 在之前的基础上还可以查看版本回退信息
    • $ git reflog
    • 更简洁
      • HEAD
      • commit后面是注释
      • 最前面的是不完整的版本号,只有前七位
      • 可以看到版本回退信息,直接log是看不到的

版本回退的两种情况

  • 本地仓库修改了内容,但是修改还没有提交到版本库(相当于取消修改)
    • $ git reset -- hard HEAD
    • ls - la
    • echo
    • cat
    • git status
    • git add
    • git reset -- hard HEAD
  • 本地仓库修改了内容,并且修改已经被提交到版本库(回退到以前的版本)
    • $ git reset -- hard HEAD^回退到上一个版本

    • $ git reset --hard HEAD^^回退到上两个版本

    • $ git reset -- hard HEAD ~ N 回退到上N个版本

    • $ git reset -- hard 五位数字的版本号 指向任意的版本

      • 拷贝前面五位数

创建共享版本库并初始化项目(忽略操作)

  • 创建共享版本库
    • 可以安装在服务器端 非常复杂(后台)
    • 可以安装在一个文件夹里面
    • 安装在U盘里面(自己查看资料)
    • 把git远程仓库,托管在一些大型的网站上面(github/oschina)
  • 在桌面创建一个文件夹(路径不能有中文), 把远程仓库把它安装在该文件夹中
    • 先初始化一个远程仓库
      • 初始化本地和初始化远程仓库区别?
      • 初始化远程仓库 git -- bare init
      • 本地仓库有一个.git文件,远程的共享仓库,没有.git文件
      • 远程仓库bare= true ;本地仓库bare = faulse
    • 创建一个空的文件夹(项目经理的客户端),项目经理连接上共享版本库,然后把共享版本库下载到本地
      • $ git clone 仓库路径
    • 项目经理配置本地仓库
      • 设置用户名和邮箱
      • $ git config user.name "manager"
      • $ git config user.email "[email protected]"
      • 打开config文件查看
    • 创建一个忽略文件,进行忽略处理
      • 新建一个文件$ touch .gitignore,拷贝内容到该文件中
      • github- 搜索.gitignore
        • 框架 找到oc的
        • 拷贝内容到创建的.gitignore文件中
      • 查看文件状态,把该文件添加到暂缓区
        • git status
        • git add .gitignore
      • 把更改提交到本地的版本库
        • git commit - m"进行忽略操作" .gitignore
    • 使用Xcode创建一个新的项目
      • 已经有一个git仓库了,不能再创建了
      • 查看状态,内部会自动做一次 添加操作
      • 用Xcode创建的项目,默认会做一次add操作
        • 如果一次性添加多个文件
          • $ git add .
      • 把文件提交到本地 git commit -m "项目初始化处理"
      • 把本地版本库的内容,提交到共享版本库Server
        • $ git push
        • 共享版本库是数据库,是以数据源的方式存储
    • 张三连接上共享版本库,下载到本地
      • git clone
    • 更新 pull

Xcode多人开发和冲突处理

  • 项目经理
    • discard all changes 取消文件修改
    • pull
    • 项目经理开始开发,提交commit到本地的版本库
    • push提交到共享的版本库
  • 张三
    • pull
    • push
  • 冲突

    • 项目经理和张三修改了同一行代码
      • 如果提交成功了,可能就是没有给项目经理和张三分配用户名和邮箱
      • 解决冲突
    • 张三添加了注释,提交了
    • 项目经理pull,更新获得最新的
  • git仓库对于静态库的处理

    • svn对于静态库不识别.a文件
    • git不需要手动添加,内部会自动的做添加操作

把git远程仓库托管在github上面

  • 注册github

  • 创建一个仓库

    • 点击加号
    • 仓库名称repository name
    • 描述信息:description
    • 开源public | 私有 private(每一月几百元)
    • initialize this repository readme 要不要装readme文件
    • 选择要忽略的文件object-c
    • 协议:MIT Licence
      • 点击后面的i,可以查看协议的具体内容
    • create repository
  • 初始化处理

    • 连接上仓库,把仓库下载到本地
      • clone or download
        • HTTPS
        • SSH:秘钥对的方式处理的
          • 公钥放在网站上
          • 私钥放到电脑里
        • 拷贝url,打开xcode,preperence,切换到账号,把拷贝的路径,粘贴到address上
        • 用户名和密码是github的用户名(邮箱)和密码
        • checkout
        • next
    • 不需要做忽略和添加操作
    • 项目的初始化处理commit and push

github删除代码仓库

  • commits提交的次数
  • branch 分支
  • releases 备份信息
  • fork复制一份仓库到本地
  • pull requests 请求合并
  • Wiki 公共界面,介绍框架的基本信息
  • graphs 贡献度
  • 删除:setting 最后面 delete this repository 需要输入要删除的仓库的名称
  • 删除操作是不可逆的
  • issues github上面提问题
    • new
    • submit new issues
  • github上提意见
  • 注意:在使用别人框架的时候,自己修改框架,对框架的原作者发送一个请求,请求合并自己的代码
    • 复制fork到个人账号
    • 下载clone download
    • check out
    • 下载下来之后就可以修改框架了
    • new pull requests
    • 跳转到原作者界面,请求标题,添加描述信息
    • create pull request
    • 请求合并的操作会在

创建项目导入已有项目

  • 问题:显示的都是?,不能识别文件,需要手动的全部添加进去
    • cd 仓库路径
    • git st 红色
    • git add .
    • git st 绿色
    • 能够识别了

托管到github上SSH认证

  • 秘钥对
  • SSH路径拷贝一份,认证信息要选中SSH Keys
  • Public Key
    • finder - 前往 - 个人 .ssh隐藏文件 - 删除里面的内容
  • Private Key
  • 如何生成公钥和私钥
    • settings
    • SSH ahd GPG keys
    • generating an ssh keys
    • 命令行
      • 拷贝,后面改成自己的邮箱
      • rsa 算法
      • 保存的位置:可以不输入
      • 密码可以不输入
      • 生成秘钥的标识,出现一个正方形
      • id_rsa
      • id_rsa_pub拷贝一份到网站上
        • 打开方式,文本编辑,全选拷贝
        • 回到设置界面,new ssh key
          • 标题可以随便写
          • 把复制的信息粘贴到key栏
  • 复制路径,打开Xcode,偏好设置,tepe:git
    认证方式:SSH 再把仓库下载下来

github中使用tags标签备份

  • 命令行
    • cd
    • 查看当前有没有备份信息
      • git tag
    • 对当前版本进行备份
      • $ git tag - a MOMO1.0 - m"MOMO1.0"
    • 把本地的提交到共享版本库
      • $ git push orgin MMO1.0
      • YES
      • [new tag]表示新创建了一个tag
      • release 里面查看备份信息

OSChina

  • 码云
  • 新建项目
  • 项目名称
  • 项目介绍
  • 项目语言
  • GitIgnore
  • 开源许可证
  • 项目属性:私有项目
  • ReadMe
  • 连接仓库 HTTPS |SSH
  • 拷贝路径
  • 偏好设置,仓库
  • 账号的用户名和密码
  • 同样的方式生成秘钥对

你可能感兴趣的:(GIT)