--- title: "05-git与github项目管理篇" created: 2025-11-25 tags: - 项目 aliases: - git与github项目管理篇 --- # 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 外 还拓展了很多其他的版本控制工具 并拓展了一些思路: ![[image-6ce4da82.png]] ![[image-ef8e9682.png]] ![[image-236862c7.png]] ![[image-418243a6.png]] ## 目的 但是 我只是想简单的入个门,毕竟 git 也只是个工具——对于工具 学会怎么用就足够了,思路方面要懂、听听就够了,但没必要记下来。 所以 我在这里重点是记录:怎么去使用 git 的图形化工具(github desktop)和 github,我该怎么使用他们让我的项目管理变得更加高效。 至于一些 git 的命令符 会将尚硅谷的讲义附在文章后边 以便查阅;以及 csdn 这篇也是很完整的:。git 基本指令得会,但现在先从用图形化开始。 ## 下载 - git 下载: - github desktop 下载: - 汉化: ## 基本使用 ### 工作目录→本地仓库 ![[image-0170a81e.png]] 文件+新建 就可以选一个目录作为项目目录,会生成 `.git` 文件夹——这个文件夹应该就是监控(比对)文件的核心。 但是一般都不这样创建存储库:应该是在 ide 里面创建代码、构建代码文件后 再引用该目录作为 git 仓库(其实 ide 里面也有内置的 git 功能)。 ![[image-2f0e8562.png]] 同时就可以在github desktop中看到 ![[image-b03441b0.png]] 当然 文件夹会出现 ![[image-45ea39d6.png]] ### “更改”文件的版本控制 在这个 `.git` 文件夹的同级目录或者下级目录中,如果文件有发生更改(增删改) 都会被检测到,并记录在“更改”中 等待 commit。 ![[image-c9de2f7e.png]] ![[image-c22c187d.png]] ![[image-f08d83da.png]] 只要发生了改变 就会被检测到 (不得不说 jetbrains 的 ide 确实 nb,mysql、git 的这些功能都集成在一起了) 每次改变 只要被提交了 就是一个新的版本;这些版本都会被记录 可以被回滚。 ![[image-d00049f4.png]] ![[image-5cf23e11.png]] ![[image-1dfe560a.png]] 然后再去把那个测试文件给删了 就又可以提交一次 其实就是回到了第一个版本 我只能说 什么github desktop 真不如ide内置的直观 ![[image-f910ac53.png]] 就是这个过程 ![[image-a672fea9.png]] ### 协作 分支 每个人占一个分支 在本地仓库进行修改 最后再在 hub 上进行分支合并。测试一下:创两个分支。 ![[image-96483e1b.png]] #### 无冲突情况 在分支1中添加一个文件 并提交 ![[image-6493e526.png]] 分支二中也同理 创建一个文件 并提交 ![[image-fd8418f3.png]] 当然 此时主仓库(main)或者说主分支 是没有这两个记录的 ![[image-18e66342.png]] ![[image-6d8e6944.png]] 接下来就要将两个分支的内容合并在主分支中去 ![[image-5c82305c.png]] ![[image-3aa77c4f.png]] 于是main中就有了分支2的文件 ![[image-52e6f099.png]] 或者这样 直接在ide中 ![[image-c38ecacf.png]] 这样一来 main中就又有了分支1的提交记录 ![[image-6b21ad3d.png]] #### 有冲突情况 分别在分支1 2中创建相同名字的文件common.txt 但里面的内容不同 再尝试合并 ![[image-410fbbd6.png]] ![[image-cc4bda8f.png]] 把分支1合并到main之后 再把分支2合并进去 会发出警告 ![[image-082fcaa5.png]] 继续合并 打开编辑器会具体告诉冲突内容 ![[image-d218cde7.png]] ![[image-40ac20dc.png]] 他会告诉你 当前已有的文件中 内容为“分支1” 而现在又要提交合并的文件中 内容为“这是分支二的内容” 对于大文件也是一样 他会比对出不同的地方 并询问你希望保留哪一段 当你选择完一个后 才能继续进行合并 ![[image-8a9e4a93.png]] #### 小结 可见 分支的文件对比 合并功能有多强大 到目前也只是简单的做了个了解 知道了这本质是将一份文件拷贝多份分支给多个本地仓库 各人在各自的本地仓库中进行修改更新 而后可以将修改好的项目进行合并 这个合并过程中 程序会进行比对 如果没冲突就直接合并成功 如果有冲突 就会询问你到底想要选择哪一份 实际上这方面还有很多学问 经常看到chatgpt上有人提问什么git工作树什么的 这其实也很考验大局观 对自己的项目可以分模块进行 对多人项目也可以构建出一个工作树 如果在工作之前就把这些分支什么的缕清 可想而知到时候写代码时会有多思路清晰 这个思维慢慢培养吧 做多了就熟悉了 ![[image-e4c217f3.png]] ![[image-d2400e68.png]] ![[image-056e8079.png]] #### 分支标签 合并了分支如果只显示merge branch xx 的话 在做项目时并不能清晰知道什么意思 所以可以给这些合并分支加上“备注”标签 ![[image-1a79edea.png]] ![[image-82fb78cc.png]] 这样一来就能能直观了解到每一步合并都实现了什么 在github desktop中也可以 ![[image-ec259573.png]] ![[image-81536f2c.png]] ### github它来了 远程仓库而非本地 放在本地有什么用 还是实现不了协作 需要一个远程仓库 当然可以自己在服务器搭一个 但何必呢 有现成的代码托管平台 github(全球最大同性交友平台 bushi) #### 创项目 那么来到我们的交友平台 进入自己的主页 ![[image-76015533.png]] 左上角一个大大的new ![[image-13008b02.png]] 哦豁 ! 熟悉的页面 不过这回是自己创建的了hhh ![[image-199fdea7.png]] 添加文件或者上传文件 把项目目录拖进去 ![[image-8cd8323a.png]] 其实所有操作都是和本地仓库一样的 只不过它是远程仓库罢了 比如分支功能 也都是一个道理 ![[image-dceb4446.png]] 也用不着直接在github做这些事 更多的还是在本地做 和github见要做的事情就是如何交互——将本地更新版本提交到github以及拉取github的分支到本地(clone到本地) #### 拉取仓库 clone 从 github 上 clone 仓库:直接新建 → clone 仓库即可 ![[image-4d14acf3.png]] #### 快速将项目上传github 发布其实也不是要像刚才那样进 github 主页 new 一个仓库——直接在 github desktop 中或者 ide 中就有。 ![[image-001785a6.png]] 嗯哼 直接就放在 github 上去了;或者 ide 中登入一下 github 账号就好了。 ![[image-fcdc85d2.png]] 后面应该也有一键推送的功能 我这不知道为什么抽风一直登不上去 还是用github desktop吧 ide里面连接总出问题 #### 连接gitee github 毕竟在国外 所以可能出现网络问题,也可以把代码托管在国内的 gitee 上:先在 gitee 创一个仓库,然后通过 url clone 到本地。 ![[image-d6318af2.png]] 而后这个github desktop就绑定了这个gitee仓库 就会出现推送的按钮 #### 小结 这个推送其实就是把本地仓库的修改同步到托管平台 ### ide集成git使用 (与 github 在 17 集,与 gitee 在 18 集) ## 浅探工作原理 19到21集 ![[image-92ed5ebc.png]] ![[image-d583df62.png]] ![[image-0a7878c7.png]] ## 更多git知识(命令) 命令相关 22集及以后 ![[image-927ed15f.png]] ## 部署私有仓库gitlab 30集 --- **项目分区导航**:[[04-git实操|git实操]] ⬅️ | 05-git与github项目管理篇 | ➡️ [[06-git-github资源使用篇|git-github资源使用篇]]