Git 在Windows平台上的安装、使用详解


在这里插入图片描述

1. git介绍

1.1. 版本控制系统

  • 集中式版本控制系统-SVN

    集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

    集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,那就GG了.

    集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
    但是相较于其优点而言,集中式版本控制工具缺点很明显:服务器单点故障、容错性差

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rF8bEjAt-1587111907116)(assets/0.jpg)]

  • 分布式版本控制系统-Git

    分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。

    既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?

    分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6nZSAwiB-1587111907121)(assets/0-1559747872796.jpg)]

1.2 Windows下Git的安装

先安装Git:https://git-scm.com/downloads
再安装TortoiseGit和TortoiseGit中文语言包:https://tortoisegit.org/download/

git的安装

首先根据你的系统,选择安装64位还是32位
默认安装即可

TortoiseGit安装

首先根据你的系统,选择安装64位还是32位
安装定制界面,选择你要安装哪些功能,默认即可 --> 点击next
一路next,在完成界面,勾选 Run first start wizard,下面会进入配置界面
选择语言(默认只有英文)
Git.exe Path 把Git的安装目录拷贝进去
填写用户名和邮箱
一路next,直至安装完毕
安装完毕,鼠标右键菜单中会出现 Git 的菜单项 和 TortoiseGit 的菜单项

TortoiseGit中文语言包安装

根据自己需要选择是否安装中文语言包

首先根据你的系统,选择安装64位还是32位
一路下一步,在安装完成界面,勾选 Configure TortoiseGit to use this language·
安装完毕后可以在TortoiseGit的设置中调整语言

1.3 git工作流程

一般工作流程如下:
1.从远程仓库中克隆 Git 资源作为本地仓库。
2.从本地仓库中checkout代码然后进行代码修改
3.在提交前先将代码提交到本地暂存区。
4.提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本。
5.在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。

在这里插入图片描述
在这里插入图片描述

2. 创建本地版本库

版本库又名仓库,英文名**repository [rɪˈpɒzətri] **,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

2.1 概念

  • 工作区

用户自己创建的目录/文件夹 -> 存放源代码
本地的版本库是放在工作区中的(每个工作区中都可以创建一个版本库)
只有工作区的新文件才需要添加到暂存区

  • 版本库

管理用于提交的代码
就是一个目录: 名字-> .git

  • 暂存区

暂存区也是一个目录:,名字一般为 stage/index

首先创建新文件 -> 在工作区 (此时新文件和版本库没有关系)
将新文件添加到本地仓库中 -> 新文件被保存在了暂存区 (还是未进行版本管理)
将暂存区数据提交到版本库 -> 这时候就可以进行版本管理了

  • 提交代码的流程

要在工作区中创建新文件
将工作区中的新文件添加到暂存区(文件只需要往暂存区添加一次)
将暂存区数据提交到版本仓库(版本仓库中有很多节点, 依次记录着我们提交的各个版本)

2.2 操作步骤

  • 创建版本库

在工作区中鼠标右键 :Git create repository here…(Git在这里创建版本库…)
点击:ok
此时文件夹下出现一个.git目录

  • 添加新文件

添加完新文件后
在工作区鼠标右键:TortoiseGit --> add(添加)
勾选文件,点击:ok 、ok
此时新文件被提交到了暂存区
(新文件左下角出现一个蓝色的加号)
在这里插入图片描述

  • 提交文件

鼠标右键:Git commit -> “master”…
勾选文件
添加日志信息(要规范)
点击:Commit
出现提交进度条,显示success,点击:Close
此时文件,从暂存区提交到了版本库(被版本库挂到了某个节点上)
(文件左下角出现一个绿色的对号)在这里插入图片描述

  • 整个过程如下图:
    在这里插入图片描述

3. 修改文件

  • 修改工作区文件

修改文件后,文件左下角出现一个红色的感叹号 ,表示此时的文件内容与版本库中对应的文件内容不完全相同
修改完文件之后直接提交, 不需要再次添加到暂存区
修改完之后 的数据需要提交到本地的版本仓库中(这样Git才会对本次修改进行版本管理)
步骤同:本文2.2节的提交文件部分

  • 还原修改

TortoiseGit --> Revert…(还原…)
注意:还原之后数据就不能再恢复到还原操作执行之前那一刻了

  • 查看历史

TortoiseGit --> Show log(显示日志)
比较当前查看的版本和上一个版本的区别

TortoiseGit --> Export … (导出此版本…)
可以导出某一个需要的版本, 在需要的版本上鼠标右键

  • 差异比较

TortoiseGit --> Diff(比较差异)//当前工作区版本和提交的最后一个版本比较
TortoiseGit --> Diff with previous version(与上一版本比较差异(D))//当前工作区版本和提交的倒数第二个版本比较

  • 删除文件

可以手动删除 -> 选中需要删除的文件,delete 键,提交 (本地和版本库都被删除了)

通过菜单项删除
选中需要删除的文件之后

TortoiseGit --> Rename… // 修改文件名
TortoiseGit --> Delete // 最终删除版本仓库中的文件,本地也没有了
TortoiseGit --> Delete (keep local) // 最终删除版本仓库中的文件,本地是保留的

不管使用哪个删除操作,最终都需要提交,此时才从版本仓库中删除此文件
注意:删除操作之后必须要提交才会在本版仓库中生效

4. 练习: 添加一个本地项目到仓库

  • 设置文件忽略

先选中要忽略的文件, 在这些文件上鼠标右键

TortoiseGit --> Delete and add to ignore list (删除并添加到忽略列表)–> 按文件名删除 / 按后缀删除

将设置文件忽略的动作提交到版本库

5. 添加远程仓库

远程仓库作用:

备份本地仓库的代码
多人协同开发, 使用远程仓库合并代码

远程仓库来源:

公司自己搭建
使用现有的远程仓库:在线代码托管平台

Github: https://github.com/
码云: https://gitee.com/

5.1 添加远程仓库

创建仓库

点击 '+'号,–> New repository
输入仓库名称(Repository name)
输入仓库说明(可以省略)(Description)
选择是public还是private
如果本地仓库是第一次导入到远程仓库的话,跳过(不勾选: Initialize this repository with a README)
点击 Create Repository
进入到下一个界面,在这个界面可以看到本 仓库的 HTTPS格式 / SSH格式 的访问网址

5.2 本地仓库同步到远程仓库

使用远程仓库的HTTPS路径,把代码同步到远程仓库
(HTTPS版本的路径,可以直接使用,无需额外设置)(如:https://github.com/WHaoL/TestGit.git)

在工作区鼠标右键 --> Git 同步… --> 弹出一个窗口
把刚刚复制好的的路径(远程仓库的地址),粘贴到 :“远程URL(U)”
点击 推送
第一次安装好,第一次推送时,会提醒你输入你的Git用户名和密码
显示成功,此时就成功的把本地仓库的文件,同步到了远程仓库

5.3 HTTPS URL之 克隆远程仓库到本地

  • 进入到远程仓库中, 找到远程仓库的地址

–> 点击Clone or download的下拉箭头
–> 出现远端仓库的地址(默认是HTTPS格式的URL,点击Use SSH 切换到SSH格式的URL)
–> 点击复制

  • 在本地找一个目录, 进行如下操作

—> 鼠标右键 --> Git Clone…
—> 把刚刚复制的URL粘贴到 URL 框中
—> 目录(D) 框是要把文件下载到本机哪个文件夹下
—> 点击确定,提示成功

第一次将远程仓库内容下载到本地的时候, 才需要克隆
以后每一次想把远程仓库的代码同步到本地,只需要在工作区,右键Git 同步 … --> 点击拉取

5.4 SSH URL之 本地ssh私钥 远程ssh公钥 设置

  • 在本地生成一个密钥对

–>在本地任意目录下, 鼠标右键
–> Git Bash Here
–>输入:ssh-keygen -t rsa (会提示你默认存储的路径 /c/Users/WHaoL/.ssh/ )
–>然后 连着回车(大概三次)就会在默认目录下生成密钥对

  • 在本地设置ssh秘钥 -> 私钥

先复制好:远程仓库SSH格式的URL
在本地某一个工作区下,鼠标右键 --> Git 同步…
点击:管理 --> 弹出一个窗口 --> 粘贴 远程仓库的SSH地址 到URL框中(此时 远端框 会自动填充)
推送URL框:一般不写;如果填写的话,和URL框中保持一致即可
秘钥,设置为刚刚生成的密钥对里的私钥 id_rsa
点击 添加/保存

通过 刚刚的管理界面 ,可以把常用的远程仓库的SSH地址 / HTTPS地址 ,设置进去,使用的时候直接选择就可以了

  • 远程仓库设置公钥

进入当前用户的设置界面 :点击你的GitHub账号的 Settings
点击 SSH and GPG keys
点击 SSH keys右侧的 --> New SSH key
Title // 名字叫什么都无所谓的,起个容易辨识的名字就行
Key:刚刚生成的密钥对里的公钥信息,把id_rsa.pub中的内容拷贝过来即可
点击Add SSH key ;会提示你输入密码,输入即可
成功后,自动回到了SSH keys 界面,此时就可以看到刚刚添加的秘钥了

  • 使用ssh地址遇到的问题
    在这里插入图片描述

解决方案: 需要修改tortoisegit 使用的 ssh client 工具
需要在 tortoisegit 设置窗口中进行修改

TortoiseGit --> Network --> SSH client 默认的是 E:\soft_Git\TortoiseGit_az\bin\TortoiseGitPlink.exe
改为 E:\soft_Git\Git_az\usr\bin\ssh.exe

修改后,以后就可以愉快的使用Git工具了

6. 分支管理

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。
如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!
在版本仓库中有一个默认的分支:master, 当前仓库中有文件之后, 默认分支就被创建了

如果不创建分支, 分支默认只有一个 : master

在这里插入图片描述

6.1 创建分支

创建分支
在工作区,鼠标右键 TortoiseGit --> Create Branch … (创建分支(B)…)
在弹出的窗口给分支起个名字,点击确定

6.2 切换分支

切换分支
在工作区,鼠标右键 TortoiseGit --> Switch / Checkout(切换/检出(W)…)
在新弹出的窗口,点击切换到某个Branch(分支),点击OK(确定)

6.3 合并分支

两个分支进行合并(master, new分支),
最终要合并到那个分支(master), 就先切换到那个分支(master),
切换完成之后, 再选择把哪个分支(new分支)合并到当前分支(master)

在工作区,鼠标右键 TortoiseGit --> Merge…(合并…)
Branch框中,选择需要被合并掉的分支
点击 OK

6.4 解决冲突

合并过程中遇到了问题:
两个分支中有同名文件,这两个同名文件合并过程中,相的行有不同的数据,
这时候就会冲突,需要开发开发人员换解决
先点击关闭,退出此窗口
然后就会在工作区看到带有“合并导致了冲突”标志的文件
在这里插入图片描述
打开冲突文件,合并导致冲突之后,文件格式如下
在这里插入图片描述
手动修改冲突文件,保存
然后 在工作区,鼠标右键 TortoiseGit --> Resolve…(解决冲突…)
点击 Commit(提交)
自动生成了日志信息,我们可以修改日志信息,改成我们想要的内容
点击Commit(提交)
如果弹出窗口,提示你 有冲突提示,直接ignore(忽略)(因为我们已经手动解决)

7. 推送文件

有一个远程的仓库-> github, 但这不是一个空的仓库, 现在需要将本地的版本库提交到非空的远程仓库(初始化过的)

准备工作
我们按照先前的方法,创建一个远程仓库
只不过这次勾选了 : Initialize this repository with a README
会自动生城READM.md文件
现在得到非空的远程仓库(初始化过的)

在工作区,鼠标右键 TortoiseGit --> Sync…(同步)
可以直接把远端仓库的SSH格式URL直接拷贝到 Remote URL 框中(因为我们已经配置好了SSH的密钥对)
点击Push
发现推送失败

把本地仓库直接推送到非空的远程仓库(初始化过的) -> 失败

失败的原因:

  • 远程仓库不是空的
    • 有一个默认分支, master
  • 本地仓库, 不是空的
    • 有一个默认分支, master
  • 远程仓库和本地仓库默认分支名字相同, 但是这两个分支没有任何关系
    • 没有关系的分支进行合并 -> 失败
  • 解决方案
  1. 将远程仓库获取到本地(Fetch)
    TortoiseGit --> Sync…
    弹出的对话框中,把远端仓库的URL直接拷贝到 Remote URL 框中
    点击 Fetch
  • Pull / 拉取: 直接将远程仓库分支中的信息和本地分支进行合并
  • Fetch / 获取: 将远程仓库分支复制到本地的另外一个分支中, 不会合并
  • 分支名字: fetch_head
  1. 将两个分支进行强行合并
    TortoiseGit --> Merge…(合并…)
    Branch框中,选择需要被合并掉的分支 fetch_head
    点击OK
    提示:两个分支没有关系,拒绝合并它们
    点击 Merge unrelated history(合并非相关历史)
    点击Close
  1. 将本地仓库推送动到远程仓库
    TortoiseGit --> Sync…
    把远端仓库的URL直接拷贝到 Remote URL 框中
    点击 Push

8. 使用最多的场景

远程仓库分支和本地仓库分支有关系的情况, 该如何操作?

  • 本地:
    • 修改代码提交到本地仓库
    • 提交到远程仓库
      • 不能直接提交
      • 在推送之前应该将远程仓库代码拉取到本地
        • 进行代码合并
          • 有可能冲突 -> 手动解决冲突
      • 将新的代码推送到远程仓库

平时工作中最常用的步骤

拉取 Pull (一般本地仓库和你要推送到的远端仓库 都是有历史关联的 ,所以直接拉取,合并即可)
合并 Merge (需要的话,手动解决冲突)
提交 Commit (提交到本地仓库)
推送 Push (推送到远端仓库)

9. 错误情况

1. git clone :SSL certificate problem: unable to get local issuer certificate

  • 现象
git clone ssl 报错:
当使用git 克隆项目时遇到错误下载不下来

报错如下:
Cloning into '***'...
fatal: unable to access 'https://gitlab.***.git/': SSL certificate problem: unable to get local issuer certificate

原因:服务器的SSL证书未经过第三方机构签署
  • 解决办法
解决办法:忽略 SSL 验证

1. git bash: -->  git config --global http.sslVerify false(其实只修改这一个,就可以)

2. TortoiseGit -> Setting --> Edit global .gitconfig
添加配置:
[http]
sslVerify = false

猜你喜欢

转载自blog.csdn.net/liangwenhao1108/article/details/105582866
今日推荐