Git 基本操作指南

Git 基本操作指南

内容概要

这个作业属于哪个课程 2022面向对象程序设计
这个作业要求在哪里 2022面向对象程序设计寒假作业1
这个作业的目标 Git & Github
作业正文 如下
其他参考文献 Git - Lecture 1 - CS50's Web Programming with Python and JavaScript 2020

我也是刚刚学的,哪里写的有问题或者是什么理解有问题的,欢迎来骂。​😢​

Git 简介

Git 教程

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。


Git在大型项目的开发中,能够节省下大量的代码管理时间。极大地提高团队协作开发的效率。

Git 能为开发者做到

  • 保持代码仓库的自动更新
  • 同步多个开发者之间的开发进度
  • 回溯代码进度
  • 实现无损的测试和修改代码


Git 托管平台的注册

Git 是一款分布式的版本控制系统,需要一个代码托管平台来存放代码。

目前,最为流行的代码托管平台是 Github。但是,由于众所周知的原因,Github 在国内的访问非常不稳定。作为替代方案,国内也涌现出了许多出色的平台如 Gitee,GitCode等平台,为国内开发者用户提供服务。

这篇博客里就以 Github 为例,注册一个 Github 的账号。

image-20220116171120034

简单的输入你的邮箱,密码,用户名。在通过邮箱验证后,即可完成注册一个 Github 的账号。



Git 安装

下载

进入 Git 的网站,找到大大的下载按钮。点击他进入到下载页面。

image-20220116171408887


image-20220116171406107

同样的,由于中国网络环境的问题。如果你的下载速度极慢,可以考虑使用阿里镜像源下载。


安装

安装非常简单。

打开安装包,如果没有什么特殊需要的话。直接保持默认选项即可。

只有中途有一个选择默认编辑器的选项(如图所示)需要根据你自己的情况选择。

image-20220116175223569

我这里选择的是 VS Code。



Git 基本配置

安装完成后,在你的开始菜单中会出现一个新的 Git Bash

image-20220116175356205

可以通过 Git 自带的 Bash 或者是 Windows 内建的 cmd 对 Git 进行基本的配置。

推荐使用 Bash,可以顺便熟悉一下 Linux 的命令行指令。


在第一次使用 Git 之前,主要要进行以下两项的配置

  • 个人信息(name & e-mail)

  • 代理(因人而异)




配置个人信息

在对远程代码仓库进行修改的时候,Git 需要知道你的信息才能够区分不同用户的修改。


要对自己的个人信息进行配置,你需要在 Bash 中输入

git config --global user.name "这里输入你的名字"

git config --global user.email "这里输入你的邮箱"

--global 意味着配置全局信息,Git 允许你在不同的工作目录下有不同的配置。

输入你的个人信息,完成你个人信息的配置。



配置代理设置

没有代理,从远程仓库里面克隆代码极度痛苦。

你需要在 Bash 中输入

git config --global http.proxy http://127.0.0.1:1234(你的代理地址)

git config --global https.proxy https://127.0.0.1:1234(你的代理地址)

完成对代理的配置,享受顺畅的 Git 体验。



Git 基本概念

Git 环境配置已完成!

在详细介绍 Git 命令之前,我们需要对 Git 的基本概念进行理解一下。




为了避免在团队开发时各个开发者对项目代码做重复性工作或是不同的代码更改,从而产生不必要的冲突拖慢工作效率。Git 将项目的源代码存储在远程托管平台 (host) 的远程仓库(remote repository)中,而非本地上。

在开发时,每个开发者都会在本地拥有一份完整的代码副本,并在本地完成对代码的所有更改。所有的更改都发生在本地,不会对远程仓库中的原始代码进行修改。

确认完成修改之后,开发者在本地提交更新(commit)。Git 会自动检测并记录下所有修改。(可以理解为存了一个存档点)

当一个阶段的工作全部结束后,开发者可以将本地的仓库推送(push)到远程仓库。只有这个操作会对远程仓库内容进行修改。

此时,Git 会根据远程服务器端最新的代码内容与开发者本地的仓库进行比对。Git 根据具体修改情况自动合并双方的仓库(可能会出现冲突,需要手动更正),并且绝对保证代码的完整性。

至此,一次完整的仓库更新过程结束。



这样的流程可以解决人工同步代码时出现的很多不必要错误,并且由于这种同步模式 Git 能够提供回溯开发进度的功能。




Repository 仓库

Git 把一个项目或者说一个软件的全部相关代码文件存放的目录叫做 repository (仓库)。在 Github 上你可以根据自己的需要创建仓库,并以此来区分不同项目的文件。


Commit 提交

Git 把开发者每一次完成对项目的更改称作 commit。在我的理解中,一个 commit 就像是一个存档点,存储了上一个 commit 到当前这个 commit 的所有变更,像是对代码的增加,删除,修改。并且每个commit都可以附上一条信息,记录下你对仓库进行的具体修改。为未来的进度回溯提供必要信息。


Push & Pull 推送 & 更新

开发者可以将本地的仓库推送(push)到服务器端,也可以将服务器端的仓库下载(pull)回本地。在这个过程中,Git 能够自动的完成所有合并的工作。

当然,为了不造成混乱,不是所有人都可以 push 所有仓库。但你可以发起一个 pull request(请求别人 pull 你的本地 repository),在仓库管理者同意之后,你所提交的更改就可以合并到远程仓库中了。


Branch 分支

后面会详细提到。




Git 基本命令

刚才新建的 Github 账号里面现在还什么东西都没有。

Github 在与你账户名相同的 repository 下的 README.md 存放你对外展示的自我介绍。

那么这里就通过 Github 自我介绍的编辑来简单复盘一下 Git 的基本命令。



首先,在Github 的主页上找到绿绿的新建按钮,点击他。进入到新建 repository 的页面。

image-20220116195808708

用自己的账户名作为仓库的名字。新建一个仓库。Github 默认会将此仓库作为存放个人信息的仓库。

image-20220116200019228

完成新建之后,复制仓库的地址。下面的操作就要在本地进行了。

image-20220116200138439


克隆远程仓库

最好在一个空白的目录下,打开 Git Bash。

输入

git clone https://github.com/zenor0/zenor0.git

看到这样的提示信息,就说明克隆成功完成了。

image-20220116200601635

能看到工作目录下已经出现了远程仓库中的所有内容。

image-20220116200712529


在本地仓库修改内容

打开用来存放个人信息的 README.md。

image-20220116200753242

在本地编辑器里,可以完成对自我介绍的修改和编辑。

image-20220116201225096


对本地仓库提交更改

在本地完成编辑之后,此时,我们在本地做的所有操作还尚未同步到 Github 的远程仓库中。

我们需要回到 bash 里面,使用如下命令完成本地仓库的同步。

git add README.md
git commit -m "First commit"

image-20220116201718579

image-20220116201724275

image-20220116202017978

或者当修改的文件数量比较多的时候,可以偷懒。使用

git commit -am "Add more content"

省略一步add,一次性提交所有的更改。

image-20220116202034922


将本地仓库推送到 Github

确认完成所有更改之后就可以 push

git push

如果你是第一次push仓库的话,Git 会弹出一个登录 Github的窗口让你登录你的 Github 账号,完成第一次登录的配置。(当然,用SSH也可以嘛,再说...)

image-20220116202123003

此时,刷新你的 Github 页面。

image-20220116202201515

所有更改全部都已经同步到远程仓库。同时你还可以看到之前在 commit 时标注的内容。

image-20220116202309033

此外,在 Github 上,你还能够看到之前所有提交过的 commit。

image-20220116202326439


更新本地仓库

我们试着模拟远程仓库被其他开发者进行了修改。此时,我们需要更新本地的 zenor0 仓库。

首先,在 Github 的网页端完成对 README.md 的修改。

image-20220116205632514

image-20220116205612477

使用命令

git pull

完成对本地仓库的更新。

image-20220116205557361


同步仓库时发生冲突

然而,不是所有的合并都能够自动的完成。例如,当本地仓库和远程仓库对同一个文件的同一行代码都进行修改时,Git 无法判断要按照本地的内容合并还是要按照云端的内容合并。

这个时候,Git 会在发生合并错误的代码中插入一段内容,其中包括本地和云端的两个版本代码以及这个冲突的 Hash(用以区分不同的冲突)。我们需要在本地解决了这个合并冲突之后,再进行同步的操作。

通过对远程仓库和本地仓库中的同一行进行修改,来模拟这种情况。我对云端和本地端的 README.md 的同一行进行了不同的修改。

image-20220116212930411

image-20220116212926312

如果,这个时候使用 push 会出现报错,要求先进行 pull 同步远程仓库。

image-20220116213420739

然而,pull 操作同样会出错

image-20220116213651939

Merge conflict in README.md

Automatic merge faild; fix conflicts and the commit the result.

自动合并出错; 请修复冲突并且提交更改.

此时在本地的编辑器中打开冲突文件,就能看见 Git 对冲突文件的修改。我们需要选择一个版本,来修复这个冲突。

image-20220116213035409

修复后,保存文件。

image-20220116213129404

成功同步仓库!

image-20220116213120284



Git 分支 (branch)

Git 为开发者提供了一个极为强大的分支功能,这也是 Git 区别于其他版本控制系统的最显著特点。

理想化的软件开发流程是一个线性的过程,按部就班一步接着一步。是一种单线程的开发流程。

pic0




想象你正在开发一个项目,你正在为这个项目添加新的功能特性。

pic1

但是!在你写到一半的时候,你突然发现在添加这个功能的 commit 之前有一个 bug 没有修复。这个时候你就陷入到了一个两难的境地,是选择去修复这个 bug 丢弃掉写了一半的新功能,或是选择继续开发新功能而去忽略掉这个 bug。

而 Git 的 branch 给这种情况提供了第三种选项,你可以通过新建一个分支来做到同时开发两个分支(branch)。两个分支(branch)互不干扰。

你可以在两个分支中,完全独立地完成 修复 bug 和 开发新 feature 这两件事。

pic2

在完成了两条分支的全部开发工作后,只需要在最后的时候进行合并,便可以使两条分支重新合到一条分支上。

Branch 所提供的的强大能力避免了开发项目时中途易辙而造成代码混乱的问题。将原本单线程的开发工作,变成了多线程工作。不仅能够提升开发效率,还同时保证了开发的稳定性拓展性。非常牛逼。

pic3

posted @ 2022-01-17 09:57  zenor0  阅读(282)  评论(0编辑  收藏  举报