git与github 项目管理篇

引入

在接触大项目或者稍微复杂一点的工程时 就会有一个版本控制的困扰。在你尝试在已有代码的基础上添加某个新功能时 很有可能会出现改到一半改不下去了的情况。那么如果没有之前成功版本的备份 就会处于一种很尴尬的处境 代码一堆报错 逻辑改的稀巴烂……

当然 可以选择手动备份:在做尝试改进之前 把某个成功版本留好一个备份——这其实就是简易版的版本控制

然而协作呢 要和同事研究某项目 如果以这种方法的话 实际上会是怎么样?我在修改时 得让他别动 等我改完了 再拿我改完后的版本去做他的改进——看似是两个人在做事情 实际上同一时间只能一个人在做 甚至真实效率还不如一个人去做……

既然有困扰 就一定有高手已经提供了解决方案(你还没达到那种境界需要自己解决问题 巨人的肩膀远比想象中的要宽广)。其实 git 和 github 就是帮助做这件事情的。

可以使用 git 进行版本控制——它提供文件比对功能,有种很高级的算法能快速得知你在哪里做了改动,和数据库事务似的:你可以有一个提交 commit,如果你这次 commit 的版本与之前的保留版本有所不同 他就会生成一个新的版本 保存在某个本地仓库。你可以利用可视化工具(如 github desktop)很方便的管理这些版本

github 已经很熟悉了吧,天天在里面“偷”一些别人写的有趣的项目出来玩。现在想想该怎么自己去用它:它能供其他人 clone 出来,这意味着什么?协作啊——你可以把项目代码从本地仓库发布在 github 上,它就像是一个巨大的服务器 帮忙存储管理你的代码,其他人可以将你的项目 clone 到本地 得到一个备份。他们对这个项目进行了修改 可以以分支的形式上传回那个 github 仓库,于是 通过一些比对操作 就能将各个人的代码进行整合 成一个新的版本。这样敲代码写项目就从“单线程”变成了“多线程”

整理

然后让 chatgpt 给出一个比较正式些的整理:

版本控制的重要性:您提到了在开发过程中,可能会遇到代码改动一半无法继续的情况。确实,这时候版本控制变得至关重要。Git允许您随时回到之前的稳定版本,避免了手动备份的麻烦和风险。

Git的工作原理:Git通过跟踪文件的更改历史来管理代码版本。您正确地指出,Git使用提交(commit)来记录更改。每次提交都是代码库的一个快照,允许您随时回到任何一个提交点。

分支的作用:Git的分支功能特别适合多人协作。您可以在自己的分支上工作,而不影响其他人或主分支(通常称为master或main分支)。这样,多人可以同时进行不同的工作,最后再将这些工作合并(merge)到主分支上。

GitHub的角色:GitHub是一个基于Web的Git仓库托管服务。它不仅存储代码,还提供了一系列协作特性,如问题跟踪、代码审查和团队管理。通过GitHub,您可以将本地仓库推送(push)到远程仓库,与团队成员或整个开源社区分享和协作。

拉取请求(Pull Request):在 GitHub 上,当您想将自己的更改合并到主仓库时,可以使用拉取请求(Pull Request)。这是一种通知项目维护者查看您的更改并考虑合并它们的方式。同时,它也是代码审查和讨论的平台。

冲突解决:当多人修改了同一部分代码并尝试合并时,可能会出现冲突。Git提供了工具来帮助您识别和解决这些冲突,确保代码的一致性和稳定性。

GitHub Desktop:这是一个图形界面的Git客户端,简化了Git操作。对于不习惯使用命令行的用户来说,这是一个很好的选择。

这是尚硅谷的课件中的图解。它除了讲 git 外 还拓展了很多其他的版本控制工具 并拓展了一些思路:https://www.youtube.com/playlist?list=PLmOn9nNkQxJG-rYaP3x1Dh2XDoIzqZDJV

image-6ce4da82 image-ef8e9682 image-236862c7 image-418243a6

目的

但是 我只是想简单的入个门,毕竟 git 也只是个工具——对于工具 学会怎么用就足够了,思路方面要懂、听听就够了,但没必要记下来。

所以 我在这里重点是记录:怎么去使用 git 的图形化工具(github desktop)和 github,我该怎么使用他们让我的项目管理变得更加高效。

至于一些 git 的命令符 会将尚硅谷的讲义附在文章后边 以便查阅;以及 csdn 这篇也是很完整的:http://t.csdnimg.cn/kxwvk。git 基本指令得会,但现在先从用图形化开始。

下载

基本使用

工作目录→本地仓库

image-0170a81e

文件+新建 就可以选一个目录作为项目目录,会生成 .git 文件夹——这个文件夹应该就是监控(比对)文件的核心。

但是一般都不这样创建存储库:应该是在 ide 里面创建代码、构建代码文件后 再引用该目录作为 git 仓库(其实 ide 里面也有内置的 git 功能)。

image-2f0e8562

同时就可以在github desktop中看到

image-b03441b0

当然 文件夹会出现

image-45ea39d6

“更改”文件的版本控制

在这个 .git 文件夹的同级目录或者下级目录中,如果文件有发生更改(增删改) 都会被检测到,并记录在“更改”中 等待 commit。

image-c9de2f7e image-c22c187d image-f08d83da

只要发生了改变 就会被检测到

(不得不说 jetbrains 的 ide 确实 nb,mysql、git 的这些功能都集成在一起了)

每次改变 只要被提交了 就是一个新的版本;这些版本都会被记录 可以被回滚。

image-d00049f4 image-5cf23e11 image-1dfe560a

然后再去把那个测试文件给删了 就又可以提交一次 其实就是回到了第一个版本

我只能说 什么github desktop 真不如ide内置的直观

image-f910ac53

就是这个过程

image-a672fea9

协作 分支

每个人占一个分支 在本地仓库进行修改 最后再在 hub 上进行分支合并。测试一下:创两个分支。

image-96483e1b

无冲突情况

在分支1中添加一个文件 并提交

image-6493e526

分支二中也同理 创建一个文件 并提交

image-fd8418f3

当然 此时主仓库(main)或者说主分支 是没有这两个记录的

image-18e66342 image-6d8e6944

接下来就要将两个分支的内容合并在主分支中去

image-5c82305c image-3aa77c4f

于是main中就有了分支2的文件

image-52e6f099

或者这样 直接在ide中

image-c38ecacf

这样一来 main中就又有了分支1的提交记录

image-6b21ad3d

有冲突情况

分别在分支1 2中创建相同名字的文件common.txt 但里面的内容不同

再尝试合并

image-410fbbd6 image-cc4bda8f

把分支1合并到main之后 再把分支2合并进去

会发出警告

image-082fcaa5

继续合并 打开编辑器会具体告诉冲突内容

image-d218cde7 image-40ac20dc

他会告诉你 当前已有的文件中 内容为“分支1” 而现在又要提交合并的文件中 内容为“这是分支二的内容”

对于大文件也是一样 他会比对出不同的地方 并询问你希望保留哪一段

当你选择完一个后 才能继续进行合并

image-8a9e4a93

小结

可见 分支的文件对比 合并功能有多强大

到目前也只是简单的做了个了解

知道了这本质是将一份文件拷贝多份分支给多个本地仓库

各人在各自的本地仓库中进行修改更新

而后可以将修改好的项目进行合并

这个合并过程中 程序会进行比对 如果没冲突就直接合并成功

如果有冲突 就会询问你到底想要选择哪一份

实际上这方面还有很多学问 经常看到chatgpt上有人提问什么git工作树什么的 这其实也很考验大局观 对自己的项目可以分模块进行 对多人项目也可以构建出一个工作树 如果在工作之前就把这些分支什么的缕清 可想而知到时候写代码时会有多思路清晰

这个思维慢慢培养吧 做多了就熟悉了

image-e4c217f3 image-d2400e68 image-056e8079

分支标签

合并了分支如果只显示merge branch xx 的话 在做项目时并不能清晰知道什么意思

所以可以给这些合并分支加上“备注”标签

image-1a79edea image-82fb78cc

这样一来就能能直观了解到每一步合并都实现了什么

在github desktop中也可以

image-ec259573 image-81536f2c

github它来了 远程仓库而非本地

放在本地有什么用 还是实现不了协作

需要一个远程仓库 当然可以自己在服务器搭一个

但何必呢 有现成的代码托管平台 github(全球最大同性交友平台 bushi)

创项目

那么来到我们的交友平台 进入自己的主页

image-76015533

左上角一个大大的new

image-13008b02

哦豁 ! 熟悉的页面 不过这回是自己创建的了hhh

image-199fdea7

添加文件或者上传文件

把项目目录拖进去

image-8cd8323a

其实所有操作都是和本地仓库一样的 只不过它是远程仓库罢了

比如分支功能 也都是一个道理

image-dceb4446

也用不着直接在github做这些事 更多的还是在本地做

和github见要做的事情就是如何交互——将本地更新版本提交到github以及拉取github的分支到本地(clone到本地)

拉取仓库 clone

从 github 上 clone 仓库:直接新建 → clone 仓库即可

image-4d14acf3

快速将项目上传github

发布其实也不是要像刚才那样进 github 主页 new 一个仓库——直接在 github desktop 中或者 ide 中就有。

image-001785a6

嗯哼 直接就放在 github 上去了;或者 ide 中登入一下 github 账号就好了。

image-fcdc85d2

后面应该也有一键推送的功能 我这不知道为什么抽风一直登不上去

还是用github desktop吧 ide里面连接总出问题

连接gitee

github 毕竟在国外 所以可能出现网络问题,也可以把代码托管在国内的 gitee 上:先在 gitee 创一个仓库,然后通过 url clone 到本地。

image-d6318af2

而后这个github desktop就绑定了这个gitee仓库

就会出现推送的按钮

小结

这个推送其实就是把本地仓库的修改同步到托管平台

ide集成git使用

https://youtu.be/Fam2HA8WpSI?si=PLUnLk1oHjgcRUFt(与 github 在 17 集,与 gitee 在 18 集)

浅探工作原理

19到21集

image-92ed5ebc image-d583df62 image-0a7878c7

更多git知识(命令)

命令相关 22集及以后

image-927ed15f

部署私有仓库gitlab

30集


项目分区导航git实操 ⬅️ | 05-git与github项目管理篇 | ➡️ git-github资源使用篇