Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 对比

  • SVN 是集中式版本控制软件,版本库是放在中央服务器,当我们进行项目开发时,首先要从中央服务器获取最新版本;开发完毕后要将代码提交到中央服务器。集中版本式控制系统必须联网才能工作,即使是局域网也必须保持与局域网服务器的连接。
  • Git 是分布式版本控制软件,它没有中央服务器一说,每个人的电脑就是一个完整的版本库。当我们需要共享文件的时候只需要创建一个共享版本库进行push或pull就能看到对方修改。

Git 工作流程

  一般工作流程如下(具体命令步骤将在下文提出):

  • 从远程仓库克隆代码到本地作为本地库(可直接克隆至编辑器工作空间)
  • 代码开发完毕后提交至本地仓库
  • 从远程仓库拉取最新版代码,有冲突解决冲突(有冲突时本地仓库文件夹会有“!”标记,有可能标记会有延迟)。
  • 处理好本地库代码后提交到远程库共享代码

Git 的下载与安装

  由于本人使用的是 windows 系统,所以只阐述 windows 下 git 的安装及使用。

  • Git 软件下载

    官方下载地址:https://git-scm.com/download

  • Git 软件安装

    下载完成之后双击进行安装,选择自己的安装路径,傻瓜式 next 一路到底。

Git 本地仓库

  版本库又名仓库,repository,可以理解成一个目录,这个目录里面所有文件都将被 Git 管理起来,每个文件的修改、删除、新增,Git 都能跟踪,并且在无需联网的情况下具有完整的版本管理能力。

  • 创建本地版本库

在磁盘里任选并进入一个文件夹,右击空白处,如下:

点击 Git Bash Here,在出现的窗口中输入 git init,并且将会出现隐藏文件夹 .git。演示里面的文件夹 Git Test 就是我们所说的工作区,隐藏文件夹 .git 就是版本库。

Git 远程仓库

  目前我们已经有了本地 Git 仓库,如果需要协作开发,则必须有一个远程仓库。常用的远程仓库是 github:https://github.com/

  • 创建 Github 账号(各自摸索…)
  • 创建远程仓库:

填写好仓库名称,仓库描述,选择 Public( Private 是付费的),就可以 Create repository 了。

  • SSH 密匙

  SSH 是英文 Secure Shell的简写形式。通过使用 SSH,它可以把所有传输的数据进行加密,这样可以防止 DNS 欺骗和 IP 欺骗。目前 Github 采用这种方式对传输数据进行加密。

在 windows 系统下,我们使用 Git Bash.exe 来生成密匙,命令: ssh-keygen -t rsa。具体操作如下图:

执行完命令后,会在 windows 本地用户下的 .ssh 目录下生成公钥和私钥

密钥生成后,需要在 Github 上配置密匙本地才能访问,操作如下:

点击 Settings,选中右边侧边栏的 SSH and GPS keys,再点击右上角出现 New SSH key,将本地的公钥里面的信息全部复制,按下图操作:

点击 And SSH key 按钮完成配置!

连接 Git 远程仓库并同步

  1. 初始化账号:我们是第一次连接远程仓库,本地 Git 并不知道我们的身份,因此我们需初始化自己的身份;
    • git config user.name “你的Github账号名称(非邮箱)”
    • git config user.email “你的Github邮箱”

  1. 添加远程仓库
    • git remote add 远端名称 远程库 SSH 地址

  1. 提交到 Github 远程仓库(个人在项目开发中使用的操作)
    • git status(查看当前状态,包括当前分支、增删改过的文件)
    • git add . (将当前目录下的所有操作过的文件添加)
    • git commit -m’提交说明’ (提交到本地仓库)
    • git pull (拉取远程库的文件,每次提交到本地库后需进行此操作,有冲突则要修改并merge)
    • git push (将拉取和自己操作过的文件提交至远程仓库)

  1. 完成所有操作后我们可以在自己的 Github 上查看自己所提交的内容

以上是本人的浅显理解,如有错误,请指正,感激不尽!