• SVN 、Git、Github的使用


    1.1 SVN 总结以及使用建议

    1. 每一次保存历史记录实际上就是一次提交
    • 什么时候去保存历史记录?
      • 完成了一个具体的功能模块
      • 代码运行没有bug
    • 当天工作结束提交一次
      • 没有 bug 的前提下去提交一次
    1. 关于历史记录版本
    • 只要想要保存历史记录就必须通过服务器
    • SVN 使用数字作为版本的唯一标识
    • 即便同时有多人提交,也是按照顺序的版本号增长
    1. 关于版本冲突

      • 例如服务器中的最新版本是 4, a.txt文件中有一段内容:hello
      • 张三 4 和服务器同步的版本
        • 修改了 a.txt :hello world
        • 提交变动,保存历史记录,服务器直接就接受,版本升级为 5
      • 李四 4 和服务器同步的版本
        • 修改了 a.txt:hello lisi
        • 提交变动,保存历史记录,服务器会告诉你先和服务器上的版本更新同步然后再提交
        • 更新:
          • 5:a.txt :hello world
          • 4:a.txt :hello list
      • 解决冲突:
        • 冲突的地方:
          • 使用别人的
          • 使用你自己的
          • 使用别人和你自己的
    2. 使用建议

    • 每次提交之前,先更新
    • 更新如果遇到冲突,先解决冲突,再提交
    • 由于解决冲突很耗时,多跟你的同事口头交流
      • 例如你改这个文件的时候,告诉被人不要改
      • 或者别人改这个文件的时候,你不要改
      • 就是这样的方式可以最大程度的避免冲突

    1.2 SVN 弊端

    集中式版本控制就是集中的把源代码放到一个线上的仓库中,任何提交都围绕着中央服务器进行。
    这种方式最大的好处就是模式简单,可以很快上手使用版本控制,但是也带来了一些问题:

    1. 每一次提交都必须联网
    • 很耗时
    • 例如 Git 就可以本地保存历史记录,不需要联网
    1. 一旦服务器宕机或挂掉
    • 没法保存历史记录了(Git 可以)
    • 整个项目的历史记录可能丢失
      • Git 不会,每一个客户端本地都会有一个克隆仓库
    • 无法协同

    2. 命令行

    学习命令行最好的方式是学习 Linux 上的 shell、bash。

    2.1 GUI VS CLI

    现在,大多数的计算机用户只是熟悉图形用户界面(GUI),并且产品供应商和此领域的学
    者会灌输给用户这样的思想,命令行界面(CLI)是过去使用的一种很恐怖的东西。这就很不
    幸,因为一个好的命令行界面,是用来和计算机进行交流沟通的非常有效的方式,正像人类社
    会使用文字互通信息一样。人们说, 图形用户界面让简单的任务更容易完成,而命令行界面
    使完成复杂的任务成为可能
    ,到现在这句话仍然很正确。

    2.2 shell

    一说到命令行,其实真正指的是 shell

    shell 就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统去执行。

    几乎所有的 Linux 发行版都提供一个名为 bash 的 shell 程序。
    bash 是 Bourne Again SHell 的首字母缩写,所指的是这样一个事实。

    2.3 终端仿真器

    当使用图形用户界面时,我们需要另一个和 shell 交互的叫做终端仿真器的程序。
    在 Windows 上,一般使用操作系统自带的 cmd 或者 powershell
    在 Linux 上,如果是图形用户界面,那么可以使用 terminal 或者 konsolegnome-terminal 之类
    的终端仿真器,但基本上,它们都完成同样的事情,让我们能访问 shell,
    你可能会因为附加的一些花俏功能而喜欢上某个终端。

    关于名字,如果有人提到:控制台、终端、bash、shell、terminal 等,一般都是指上面这些。

    一般在 Linux 上,都会提供一个 bash 或者 terminal 之类的工具,让你来使用 shell

    学习 shell 最正确的方式就是学习 Linus 上的 shell。
    Linus 上的 shell,或者说 Bash 是最强大的。

    学 Linus 上的 shell 命令基本上切换到 Mac 上可以很快过度。

    所以,安装 git 的时候,自带了一个 git bash , 是一个 Linus shell 仿真器。

    也就是说 git Bash 上可以体验到绝大多数的 Linus 终端命令。

    2.4 安装 Git for Windows 客户端体验 shell

    Git for Windows 客户端自带了一个终端仿真器:git bash

    下载地址:https://git-for-windows.github.io/

    git for Windows - github 托管地址
    ,然后找到 Realease 模块,找到下载的对应版本即可。

    注意:虽然在 Windows 上可以通过 cmd 或 powershell 体验终端的使用,
    但是学习终端最正确的方式是学习 Linux 上的命令行,要更纯正,更强大。

    所以,我们这里通过使用 Git for Windows 客户端(自带了一个 bash)可以供我们学习 shell。

    打开和退出终端

    命令提示符

    命令的分类

    • 控制台自带命令

      • 工具型
        • ping
        • ipconfig
        • shutdown
        • winver
        • ......
      • 文件系统型
        • cd
        • pwd
        • ls
        • mkdir
        • cp
        • mv
        • ......
    • 第三方应用程序命令

      • CLI(Command Line Interface) 程序:命令行应用程序
        • 没有图形界面,直接在终端中运行,由第三方应用程序执行
          • 接收用户通过终端输入的字符
          • 处理执行用户通过终端输入的字符
          • 终端会对你输入的相应的参数或者命令解析执行实现相应的功能
          • 如果有提示信息,直接将提示信息或者说操作信息,输出到终端中
      • GUI 程序:图形界面应用程序
        • feiq

    常用工具型命令

    • ping
    • ipconfig

    使用终端操作文件系统

    • 绝对路径和相对路径
    • pwd(print working directory)
    • ls(list files)
      • ls 列出当前目录文件
      • ls 目录路径 列出指定路径文件
      • ls -a 列出文件并显示隐藏文件或目录
    • cd(change directory)
      • 切换到指定路径(相对路径或绝对路径)
      • 在 cmd 或 powershell 中切盘符:盘符: 回车即可
    • cp(copy)
      • cp 源路径 目标路径
      • cp 在复制目录的时候,不会复制里面的子文件或子目录
      • -r (recursive)递归复制
    • mv(move):移动文件或者目录,还可以重命名文件或目录
    • mkdir(make directory):创建目录
    • rmdir 目录名称
      • 只能删除空目录
    • rm(remove):删除文件或目录
      • -rf 递归删除:直接将整个目录包括里面的内容都删掉
      • 在cmd、powershell 不支持
    • clear:清屏
      • cmd 中无法使用 clear
      • cmd 中是 cls
    • touch 文件名
      • 根据文件名创建新的文件
    • cat 文件名
      • 查看指定的文本文件

    使用 less 命令浏览文件内容

    less 命令是一个用来浏览文本文件的程序。

    less 命令是这样使用的:less 文本文件名

    一旦 less 程序运行起来,我们就能浏览文件内容了。
    如果文件内容多于一页,那么我们可以上下滚动文件。按下 q 键,退出 less 程序。

    下表列出了 less 程序最常使用的键盘命令:

    命令               行为
    h                  显示帮助屏幕
    Page UP or b       向上翻滚一页
    Page Down or space 向下翻滚一页
    UP Arrow           向上翻滚一行
    Down Arrow         向下翻滚一行
    G                  移动到最后一行
    g                  移动到开头一行
    /charaters         向前查找指定的字符串
    n                  向前查找下一个出现的字符串,这个字符串是之前所指定查找的
    q                  退出 less 程序
    

    命令行文本编辑器:VI

    Visual Interface

    命令模式

    插入模式

    通过从命令模式按 i 进入编辑模式。

    保存:

    从编辑模式退出到命令模式,:w 保存该文件。

    • :q 退出
      • 如果没有保存会提示让你保存再退出
      • :q! 强制退出
    • :wq 保存并退出

    PATH 环境变量

    目的就是为了可以在终端中的任意目录中使用该可执行文件。


    介绍

    • Git 是一个类似于 SVN 的一个版本控制系统VCS(Version Control System)
      • 相同点:都是版本控制系统
        • 历史记录
        • 多人协作
      • SVN 是集中式版本控制系统
      • Git 是分布式版本控制系统
    • 关于名字:Git:饭桶,无用的人
      • Angular:有角的、生硬的
    • 作者:林纳斯·托瓦兹(Linus Torvalds)
      • Linux 之父,创建了 Linux 操作系统的人
      • 一个神话
    • Git 是为了更好的管理 Linux 源代码而设计开发的

    Git 的诞生

    • 关于 Git 的作者:Linus Torvalds
      • 创造了 Linux
      • 创造了开源世界
      • Ubuntu
    • 2002 年,林纳斯托瓦兹使用 BitKeeper 作为 Linus 项目的版本控制系统软件
    • 2005 年,大神一怒之下,就短短几个星期之内就诞生了 Git 的最初版本
    • 真正的大规范被开发人员使用大概在 2013 年左右
      • 2013 年之前大部分都是 SVN
      • 目前绝大多数,百分之70-80的公司都在使用 Git 作为自己的版本控制系统

    学习资源

    安装与配置

    通过在命令台输入 git --version 查看是否有 Git 环境。

    • git config --global user.name "你的名字
    • git config --global user.email "你的邮箱

    上面的配置用来配置执行 commit 的时候,记录提交者的一些基本的信息(名字+邮箱)。

    原理模型

    基本操作

    以后所有的项目文件,都使用 utf8 编码,如果你的文件就是 gbk 编码文件,
    你使用 git bash 提交的时候,应该是可以自动转码然后提交的。

    建议:以后所有的文件都使用 utf8 编码。

    # 在本地当前项目初始化一个空的 git 仓库
    $ git init
    # 当前当前版本管理状态:未被版本管理的,已修改的、以删除的等文件
    $ git status
    # 将指定的文件添加到暂存区
    $ git add
      $ git add .
      $ git add --all
      $ git add file file [file]
    $ git commit -m "提交注释"
    # 查看提交日志
    $ git log
    # 比对文件变动差异
    $ git diff
    

    工作区、暂存区、本地仓库

    工作区就是当前你所能看到的工作目录,你的任何添加、修改删除默认都是在工作区。

    暂存区起到两个作用:

    1. 可以分批次的进行提交

    假设你很长时间没有做过版本记录提交,例如你修复了某一个功能模块的 bug、开发了某个功能模块、
    修改了某些功能模块代码,这个时候就可以利用暂存区分批次的进行提交。

    1. 可以作为一个临时版本存储

    例如可以将暂存区指定文件恢复到工作区。

    本地仓库就是最终用来存储历史版本的地方,每一次 commit 都会形成一个历史版本保存到本地仓库中。

    撤销(时光穿梭机)

    使用 Git 强大的撤销功能,可以让你在工作区、暂存区、本地仓库之间来回的穿梭自如,
    例如恢复某个误删除的文件,或是恢复某个误修改的文件,
    甚至是将整个项目都恢复到指定的历史版本都是可以的。

    下面是一些常用的撤销命令,可以自行测试一下:

    # 恢复暂存区的指定文件到工作区
    $ git checkout [file]
    
    # 恢复某个commit的指定文件到暂存区和工作区
    $ git checkout [commit] [file]
    
    # 恢复暂存区的所有文件到工作区
    $ git checkout .
    
    # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
    $ git reset [file]
    
    # 重置暂存区与工作区,与上一次commit保持一致
    $ git reset --hard
    
    # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
    $ git reset [commit]
    
    # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
    $ git reset --hard [commit]
    
    # 重置当前HEAD为指定commit,但保持暂存区和工作区不变
    $ git reset --keep [commit]
    
    # 新建一个commit,用来撤销指定commit
    # 后者的所有变化都将被前者抵消,并且应用到当前分支
    $ git revert [commit]
    
    # 暂时将未提交的变化移除,稍后再移入
    $ git stash
    $ git stash pop
    

    总结:Git 提供了很多强大的命令供开发者来使用,并不一定都会用到,以理解交互模型为主,
    这些撤销命令可以自行设定场景然后一一进行测试,没有必要全部都记住,真正用到的时候再去查询文档即可。
    只要大概有个模糊的映像即可(知道有哪些功能),对于常用的命令,使用多了就记住了,不需要单独记忆。

    Git 练习

    假设你现在写一个教程类的 Demo,没完成一步小功能或者小模块,你希望能保存一次历史记录方便回顾查看
    整个 Demo 的演变进程,例如第一步搭建好了项目骨架,则可以提交一次,第二步完成了首页相关功能,
    则再提交一次,依次这样下去,就会形成一步一步的步骤,之后想要查看当初某一步的代码情况,
    则可以通过 git reset --hard [commit] 进行查看。

    *分支

    # 列出所有本地分支
    $ git branch
    
    # 列出所有远程分支
    $ git branch -r
    
    # 列出所有本地分支和远程分支
    $ git branch -a
    
    # 新建一个分支,但依然停留在当前分支
    $ git branch [branch-name]
    
    # 新建一个分支,并切换到该分支
    $ git checkout -b [branch]
    
    # 新建一个分支,指向指定commit
    $ git branch [branch] [commit]
    
    # 新建一个分支,与指定的远程分支建立追踪关系
    $ git branch --track [branch] [remote-branch]
    
    # 切换到指定分支,并更新工作区
    $ git checkout [branch-name]
    
    # 切换到上一个分支
    $ git checkout -
    
    # 建立追踪关系,在现有分支与指定的远程分支之间
    $ git branch --set-upstream [branch] [remote-branch]
    
    # 合并指定分支到当前分支
    $ git merge [branch]
    
    # 选择一个commit,合并进当前分支
    $ git cherry-pick [commit]
    
    # 删除分支
    $ git branch -d [branch-name]
    
    # 删除远程分支
    $ git push origin --delete [branch-name]
    $ git branch -dr [remote/branch]
    

    推送和获取远程仓库

    $ git remote add
    $ git push
    $ git clone
    $ git pull
    

    Github

    准备

    • 创建账户

    基本使用

    • 创建仓库
    • 连接仓库
    • 公开代码

    Pull Request


    扩展

    • 环境变量
    • Sublime 插件

  • 相关阅读:
    MyEclipse2014中SVN的使用方法
    使用Navicat V8.0创建数据库,外键出现错误ERROR 1005: Can’t create table (errno: 121)
    个人简历
    Android Studio集成SVN报错:can't use subversion command line client : svn
    面向对象原型的七种方法详解(前)
    js中return的用法
    面试题总结
    Ajax 是什么?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?以及 HTTP状态码
    css3实现的3中loading动画效果
    CSS3绘制弹球动画效果
  • 原文地址:https://www.cnblogs.com/feiyu6/p/7373022.html
Copyright © 2020-2023  润新知