Git 使用教程:最详细、最正宗手把手教学(万字长文)
目录
- 一:Git
- 二:SVN与Git的的区别
- 三、安装Git
- 四:常规操作
- 五:远程仓库
- 六:创建与合并分支
- 七:bug分支
- 八:多人协作
- 九:git可视化工具
Git
Git 是一种分布式版本控制系统,用于管理软件项目的源代码。它是由 Linux 之父 Linus Torvalds 开发的,并已经成为了现代软件开发领域中最流行的版本控制系统之一。
使用 Git 可以追踪代码的历史修改记录,方便团队协作、代码共享和代码重构。Git 的基本工作流程如下:
- 在开始编写代码之前,首先需要创建一个 Git 仓库(repository),用于存储代码和版本历史记录。
- 在编写代码时,可以通过
git add命令将更改的文件添加到 Git 的暂存区(staging area)中。 - 通过
git commit命令将暂存区中的更改提交到 Git 仓库中,并生成一个新的版本号(commit hash)。 - 如果需要撤销某个提交,可以使用
git revert命令来创建一个新的提交,该提交将会抵消先前的提交效果。 - 如果需要合并不同分支的代码,可以使用
git merge命令进行合并。 - 如果需要查看代码的历史提交记录,可以使用
git log命令来获取详细信息。 - 如果需要将代码推送到远程仓库,可以使用
git push命令将本地代码推送到远程仓库。 - 如果需要从远程仓库中获取代码,可以使用
git pull命令将远程代码拉取到本地。

- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
SVN与Git的的区别
SVN和Git都是版本控制系统,但它们有以下区别:
- 分布式 vs 集中式:Git 是一种分布式版本控制系统,而 SVN 是一种集中式版本控制系统。在 Git 中,每个开发者都拥有本地代码库的完整副本,可以离线工作并在不同的工作流程之间自由转换。而在 SVN 中,所有开发者共享同一个中央代码库,并且需要有网络连接才能进行版本控制操作。
- 分支管理:Git 在分支管理方面比 SVN 更加强大和灵活。Git 的分支非常轻量级,创建和合并分支也很容易,因此可以轻松实现多人协作和并行开发。而在 SVN 中,分支比较重量级(即创建和合并分支需要花费相对更多的时间和资源),因此往往只用于重要的版本分支。
- 版本号:Git 使用 SHA-1 哈希值来标识每个提交,而 SVN 采用递增的数字版本号来标识每个提交。SHA-1 哈希值保证了每个提交的唯一性,而递增版本号则简化了版本控制过程。
- 整体性:由于 SVN 是一种集中式版本控制系统,因此所有数据都存储在中央代码库中。如果中央代码库损坏或丢失,可能会导致数据丢失或无法恢复。而 Git 是一种分布式版本控制系统,每个开发者都拥有完整的代码库副本,保证了代码的整体性和可靠性。
- 性能:Git 比 SVN 更快,特别是在处理大型仓库、分支合并以及比较代码差异时。Git 使用基于内容的哈希算法来检测文件是否修改,而 SVN 则需要检查文件的元数据(如时间戳和文件大小)来确定是否修改。
总之,虽然 SVN 和 Git 都是版本控制系统,但它们的设计和实现方式存在较大差异,开发人员应根据自身需求选择最适合的版本控制系统。
常规操作
创建版本库
首先,打开终端或命令行界面,进入要创建版本库的目录下。
接着,使用以下命令初始化一个空的 Git 仓库:
git init
然后,将需要管理的文件添加到暂存区:
git add <file>
你也可以使用以下命令一次性将所有变更添加到暂存区:
git add .
接下来,提交暂存区中的变更到本地仓库,并添加一个描述信息:
git commit -m "Initial commit"
现在,你已经成功地创建了一个版本库。你可以使用其他 Git 命令来管理它,例如:
git status:查看当前工作区和暂存区的状态。git log:查看提交记录。git branch:管理分支。git remote:管理远程仓库。
版本回退
要将Git存储库版本回退,请使用git reset命令。如果您想要撤消上次提交并返回到上一个提交,则可以使用以下命令:
git reset HEAD~1
这将使HEAD指向上一个提交,但不会删除您最新的更改。如果您希望完全返回到以前的提交并放弃所有更改,则可以添加--hard选项:
git reset --hard HEAD~1
请注意,此操作将永久删除您最新的更改,请谨慎使用。如果您已经将更改推送到远程存储库,则在执行此操作之前应先备份这些更改。
理解工作区与暂存区的区别
Git有三个主要的工作区域:工作区(working directory)、暂存区(staging area)和版本库(repository)。
工作区是指您电脑文件系统上用于修改文件的目录。在这里,您可以创建、编辑和删除文件。
暂存区是一个中间状态,它充当了您提交更改的缓冲区。在Git中,您必须明确地将文件添加到暂存区,然后才能将其提交到版本库中。这样做的好处是,您可以对每个更改进行精细控制,并确保只提交需要保存的更改。
版本库包含Git存储库的所有历史记录和元数据。它是Git存储库的核心组成部分,是由Git自动维护的。
简而言之,工作区是您正在处理的实际文件,而暂存区是下一次提交所需更改的文件列表。它们之间的区别在于,您可以对工作区中的任何文件进行修改,但只有将它们添加到暂存区并将其提交到版本库中,它们才会成为Git跟踪的部分。
Git撤销修改和删除文件操作
要撤销对文件的修改,可以使用git checkout命令:
git checkout -- <filename>
此命令将覆盖工作树中指定文件的更改,还原为最近提交或上次检出的状态。
要删除文件并将此更改提交到Git存储库中,可以使用git rm命令:
git rm <filename>
git commit -m "Remove file"
这将从工作树和版本历史记录中删除指定的文件。如果只是想从Git版本库中删除文件但保留在工作树中,则可以使用git rm命令的--cached选项:
git rm --cached <filename>
git commit -m "Remove file from repository"
这将从版本历史记录中删除指定的文件,但保留在工作树中。
远程仓库
如何添加远程仓库
要将本地代码库连接到远程仓库,可以使用以下git命令:
- 首先,将本地代码库初始化为Git仓库(如果尚未完成):
git init - 添加远程仓库的URL,其中
<remote-name>是自定义名称,<remote-url>是远程仓库的URL:
git remote add <remote-name> <remote-url> - 可以使用以下命令确认远程仓库是否已成功添加:
git remote -v
此后,您就可以使用git push命令将代码推送到远程仓库,或使用git pull命令从远程仓库拉取代码。
如何从远程库克隆
要从远程仓库克隆代码到本地,可以使用以下git命令:
git clone <remote-url>
其中<remote-url>是远程仓库的URL。执行此命令后,Git将在当前目录下创建一个新目录,其中包含克隆的代码库副本。如果想指定不同的目录名,可以将目录名作为可选参数添加到命令中:
git clone <remote-url> <directory-name>
在执行git clone命令时,还可以通过添加其他标志来更改默认行为,例如指定要克隆的分支、禁用克隆时自动检查的文件等。有关详细信息,请参阅相应的文档。
创建与合并分支
创建一个新的分支可以使用以下命令:
git branch <branch_name>
这将在当前所在的提交上创建一个名为 <branch_name> 的新分支。
要切换到新创建的分支,可以使用以下命令:
git checkout <branch_name>
创建并立即切换到该分支,可以使用以下命令:
git checkout -b <branch_name>
合并分支可以使用以下命令:
git merge <branch_name>
这将将 <branch_name> 分支中的更改合并到当前分支。
处理冲突
当两个分支上的代码修改了同一部分,并且尝试将这两个分支合并时,就会发生代码冲突。Git提供了以下步骤来解决冲突:
- 运行
git status命令查看哪些文件包含冲突。 - 编辑有冲突的文件,手动解决文件中的冲突。
- 对编辑后的文件进行
git add,标记为已解决冲突的文件。 - 使用
git commit提交更改,Git 会自动生成一个合并提交,其中包含各自分支中的更改。
注意:在解决冲突前,最好先备份当前的代码状态,以免不小心破坏代码库。另外,在处理冲突之前,可以通过运行 git diff 命令来查看冲突的源代码,以便更好地理解要解决的问题。
分支管理策略
在 Git 中,常见的分支管理策略包括以下几个方面:
- 主分支:主分支通常是最稳定的分支,用于发布生产版本。在 Git 中,主分支通常是 master 分支或者 main 分支。
- 开发分支:开发分支通常从主分支派生而来,在其上进行新功能或修复错误的开发。在 Git 中,通常使用 develop 分支作为开发分支。
- 特性分支:特性分支是为了开发单独的功能而创建的分支。这些分支通常从开发分支派生而来,并在实现目标后被合并回开发分支。在 Git 中,通常使用 feature/ 分支命名约定来表示特性分支。
- 发布分支:发布分支是用于准备发布版本的分支,通常从主分支派生而来。这些分支应该包含与发布相关的所有更改,并且应该经过全面测试和审核后再合并回主分支。在 Git 中,通常使用 release/ 分支命名约定来表示发布分支。
- 热修复分支:热修复分支通常用于快速修复紧急问题,例如安全漏洞或崩溃。这些分支通常从主分支派生而来,并且只包含必要的更改。在 Git 中,通常使用 hotfix/ 分支命名约定来表示热修复分支。
通过采用合适的 Git 分支管理策略,可以帮助团队更好地组织和管理代码,提高团队的协作能力和生产效率。除了上述常见的分支管理策略,还可以根据团队的具体需求和工作流程定制适合自己的分支管理策略。
bug分支
在 Git 中,通常使用 bug 分支用于修复代码中的错误或缺陷。当发现 bug 时,可以从当前开发分支(如 develop 分支)创建一个 bug 分支,在该分支上进行错误修复。修复完成后,可以将更改提交到 bug 分支,并将其合并回开发分支和主分支。
以下是一个典型的使用 Git bug 分支的流程:
- 从当前开发分支(如 develop 分支)创建一个新的 bug 分支:
git checkout -b bug/fix-xxx
- 在 bug 分支上进行错误修复,包括必要的测试和代码审查。
- 提交更改并推送到远程仓库:
git add .
git commit -m "Fix xxx bug"
git push origin bug/fix-xxx
- 将 bug 分支合并回开发分支(如 develop 分支):
git checkout develop
git merge --no-ff bug/fix-xxx
- 测试修复是否正确,如果一切正常,则将开发分支合并回主分支(如 master 分支):
git checkout master
git merge --no-ff develop
通过使用 Git bug 分支,可以帮助团队更好地管理和修复代码中的错误和缺陷,同时保持代码库的稳定性和可靠性。
多人协作
Git 是一个优秀的多人协作工具,以下是 Git 多人协作的一些最佳实践:
- 使用分支:使用分支可以帮助团队成员在不影响主分支的情况下进行开发和测试,避免代码冲突和错误。建议采用主分支、开发分支、特性分支、发布分支、热修复分支等分支管理策略。
- 提交规范:每次提交代码时应该附加有意义的提交信息,描述本次提交的更改内容和目的。建议采用语义化版本号和提交信息模板等规范,以便更好地记录和追踪代码变更历史。
- 定期合并:团队成员应该定期将自己的分支合并回主分支或者开发分支。这可以避免较大的代码冲突和错误,并且保持代码库的整洁和可维护性。
- 代码审查:通过代码审查可以确保代码的质量和一致性,并且可以识别和纠正潜在的问题和错误。建议采用 pull request 和 code review 等工具和流程,以便团队成员对彼此的代码进行审查和反馈。
- 团队协作:团队成员之间应该保持及时和有效的沟通,共享技术和经验,并尽可能避免个人行为和偏见对项目和团队产生不良影响。
通过采用上述最佳实践,可以帮助团队高效协作、保证代码质量和稳定性,并提高团队的生产力和创造力。
推送分支
在 Git 中,推送分支指将本地的分支提交到远程仓库中,使得其他团队成员可以访问和获取该分支的代码。以下是在 Git 中推送分支的一些常用命令:
- 推送当前分支到远程仓库,并与远程分支关联:
git push -u origin <branch-name>
- 推送当前分支到远程仓库,并与远程分支合并:
git push origin <branch-name>
- 强制推送当前分支到远程仓库:
git push -f origin <branch-name>
- 删除远程分支:
git push origin :<branch-name>
或
git push --delete origin <branch-name>
在推送分支时,通常会遇到冲突等问题。如果发生冲突,需要先解决冲突,然后再进行推送。
另外,在多人协作项目中,建议采用 pull request 和 code review 等工具和流程来对分支进行审查和反馈,以确保代码质量和稳定性。同时,也应该避免直接向主分支(如 master 分支)提交代码,而是应该使用分支管理策略来组织和管理代码。
抓取分支
在 Git 中,抓取分支指从远程仓库拉取最新的代码和分支信息,并在本地创建相应的分支。以下是在 Git 中抓取分支的一些常用命令:
- 拉取所有远程分支并更新本地分支:
git fetch --all
- 拉取一个特定的远程分支到本地:
git fetch origin <branch-name>
- 在本地创建基于远程分支的新分支:
git checkout -b <new-branch-name> origin/<remote-branch-name>
- 拉取远程分支并自动与本地分支关联:
git checkout --track origin/<remote-branch-name>
或
git checkout -t origin/<remote-branch-name>
抓取分支时,需要注意避免覆盖当前分支中未提交的更改。如果本地分支和远程分支存在冲突,需要解决冲突后才能将更改合并到本地分支中。
通过抓取分支可以使得开发者获取最新的代码和分支信息,在本地进行代码修改和测试,并将更改推送回远程仓库以进行协作开发。
git可视化工具
Git 可视化工具可以帮助开发者更直观地查看和管理代码版本控制历史,以下是几个常用的 Git 可视化工具:
- GitKraken:GitKraken 是一款简单易用的 Git 可视化工具,支持 Windows、Mac 和 Linux 等多个平台。它提供了强大的图形界面,包括代码历史记录、分支管理、合并冲突解决等功能。
- Sourcetree:Sourcetree 是由 Atlassian 公司开发的一款免费 Git 可视化工具,支持 Windows 和 Mac 平台。它提供了友好的用户界面,可以轻松地进行代码提交、分支管理和冲突解决等操作。
- GitHub Desktop:GitHub Desktop 是 GitHub 公司出品的一款免费 Git 可视化工具,支持 Windows 和 Mac 平台。它提供了清晰明了的界面,可视化显示代码历史记录、分支管理、拉取请求(pull request)等功能,以及与 GitHub 网站的集成支持。
- Git GUI:Git GUI 是 Git 官方提供的一个图形化界面的工具,支持 Windows、Mac 和 Linux 等多个平台。它虽然不如前面提到的工具那样友好易用,但是对于习惯命令行操作的开发者来说,Git GUI 可以提供便捷的图形化界面。
使用 Git 可视化工具可以帮助开发者更直观地理解和管理 Git 中的代码版本控制历史,提高协作效率和代码质量。
相关文章:
Git 使用教程:最详细、最正宗手把手教学(万字长文)
目录 一:Git二:SVN与Git的的区别三、安装Git四:常规操作五:远程仓库六:创建与合并分支七:bug分支八:多人协作九:git可视化工具 Git Git 是一种分布式版本控制系统,用于…...
【华为OD机试 2023最新 】最优资源分配/芯片资源占用(C语言题解 100%)
文章目录 题目描述输入描述输出描述备注用例题目解析代码思路C语言题目描述 某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分别为A、B、C。 配置A:占用容量为 1.25 * 1 = 1.25G配置B:占用容量为 1.25 * 2 =…...
markdown二元运算符
符号markdown名称 \pm \pm正负/加减 ∓ \mp ∓\mp负正/减加 \times \times乘号 ⋅ \cdot ⋅\cdot点乘号 \div \div除号 ∣ \mid ∣\mid整除 ∤ \nmid ∤\nmid不整除 ⊕ \oplus ⊕\oplus异或...
【华为/华三】PPP
NCP network阶段 用于协商网络层参数,IPCP静态协商IP地址(即互推地址)动态协商叫做获得地址 Q:为什么PPP两端,可以不在一个网段内,也能够通信? A:因为PPP中的NCP会通过IPCP协商IP…...
【Java笔试强训 9】
🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥另类加法…...
【C++】STL标准库之list
STL标准库之list list类的简介常用的list类的接口构造迭代器容量访问修改 list和vector的区别 list类的简介 list是一种序列式容器,可以在任意位置插入和删除元素,并且其时间复杂度为O(1),在底层,list是双向链表结构,…...
Nomogram | 盘点一下绘制列线图的几个R包!~(二)
1写在前面 不知道各位小伙伴的五一假期过的在怎么样,可怜的我感冒了。😷 今天继续之前没有写完的列线图教程吧,再介绍几个制作列线图的R包。🤠 2用到的包 rm(list ls())library(tidyverse)library(survival)library(rms)library(…...
Django之定时任务django-crontab
Django之定时任务django-crontab crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务符号方法解决crontab中文问题管理定时任务注意 crontab Django可以使用第三方库如django-crontab来实现定时任务的调度。该库允许使用类似于crontab文件格式的语法指定任…...
linux常见命令
ls:列出当前目录下的所有文件和子目录 cd:切换当前工作目录,例如 cd /home/user 进入 /home/user 目录 pwd:显示当前工作目录的路径 mkdir:创建一个新目录,例如 mkdir newdir 创建一个名为 newdir 的目录…...
【14.HTML-移动端适配】
移动端适配 1 布局视口和视觉视口1.1 设置移动端布局视口宽度 2 移动端适配方案2.1 rem单位动态html的font-size;2.2 vw单位2.3 rem和vw对比2.4 flex的弹性布局 1 布局视口和视觉视口 1.1 设置移动端布局视口宽度 避免布局视口宽度默认980px带了的缩放问题,并且禁止…...
平衡二叉树旋转机制
概念 平衡二叉树的旋转机制是一种通过对树进行旋转操作来保持其平衡的方法。 分类 平衡二叉树的旋转机制包括两种基本类型的旋转:左旋和右旋,以及它们的组合。 左旋 左旋是将一个节点的右子节点旋转到它的位置上,同时将该节点移到其左侧&…...
深入浅出C++ ——C++11
文章目录 一、C11简介二、列表初始化二、声明四、范围for循环五、STL中的变化六、右值引用和移动语义1. 什么是左值?什么是左值引用?2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 完美转发 新的类功能默认成员函数类成员变量初始化defaultdele…...
智能座舱3.0阶段,看全球巨头如何打造更具“价值”的第三空间
面向中国这一全球最大的汽车电动化与智能化单一市场,作为全球第七大汽车技术供应商的FORVIA佛瑞亚集团开始全面发力。 在2023年上海国际车展上,FORVIA佛瑞亚携旗下佛吉亚与海拉一系列突破性技术和互动体验亮相,展示了对电气化与能源管理、安…...
【Linux】入门介绍
🌱博客主页:大寄一场. 🌱系列专栏:Linux 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 前言 Linux背景介绍 1.发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 官网 4. 企业应用现状 5. 发行版…...
【Python】序列类型②-元组
文章目录 1.元组简介2.元组的定义2.1定义只有一个元素的元组 3.元组的下标访问4.元组的常用方法5.使用in判断是否存在元素6.多元赋值操作 1.元组简介 元组和列表一样可以存放多个,不同数据类型的元素 与列表最大的不同就是:列表是可变的,而元组不可变 2.元组的定义 元组的定义:…...
循环的数字
循环的数字 题目描述 你曾经因为看见一样的东西一遍又一遍地重复、循环而对电视节目感到厌烦么?好吧,虽然我并不关心电视节目的好坏,不过有时却也很像那样不断循环的数字。 让我们假定两个不同的正整数 ( n , m ) (n, m) (n,m) 是循环的&…...
MySQL查询之聚合函数查询
0. 数据源 student.sql文件。 /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80016Source Host : localhost:3306Source Schema : testdbTarget Server Type : MySQLTa…...
普通2本,去过字节外包,到现在年薪25W+的测试开发,我的2年转行心酸经历...
个人简介 我是一个普通二本大学机械专业毕业,17年毕业,19年转行,目前做IT行业的软件测试已经有3年多,职位是高级测试工程师,坐标上海… 我想现在我也有一点资格谈论关于转行这个话题;希望你在决定转行之前…...
util.callbackify
util.callbackify(original) 将 async 异步函数(或者一个返回值为 Promise 的函数)转换成遵循异常优先的回调风格的函数,例如将 (err, value) > ... 回调作为最后一个参数。 在回调函数中,第一个参数为拒绝的原因(如…...
解决使用CLIP模型时TypeError: Cannot handle this data type: (1, 1, 224, 224), |u1
想提供Huggingface的transformer库实现多模态模型CLIP的推断,结果报错 (myenv) rootd27d1ff1836c:/home/model_test# python3 CLIP.py ftfy or spacy is not installed using BERT BasicTokenizer instead of ftfy. Traceback (most recent call last): File “/hom…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
