工欲善其事,必先利其器。
最近重新回顾了一下git的用处,因为不是专业的开发,所以很多东西的理解仅仅是停留在能用的基础上。在使用的过程中,突然发现它的工作机制类似于你在电子游戏中的存档点。如果你是编程新手或只是想以一种轻松的方式理解 Git,这篇文章正适合你。让我们一步步揭开 Git 的神秘面纱,看看它是如何在软件开发中扮演关键角色的。
以我最近一直在玩的《GD版霸王的大陆》游戏为例。
开始新游戏:创建新分支
想象一下,每当你玩一个新游戏时,你都会开始一个新的旅程。假如我有很多游戏要玩,我最近玩会玩《GD版霸王的大陆》,相当于在git中建立了一个仓库,一般一个仓库代表一个开发项目。现在假定我们在玩游戏了,一般游戏会让你选择一个存档。在 Git 中,当开发者需要添加一个新功能或修复一个错误时,他们会从主线(main
分支)创建一个新的“游戏存档点”—— 我们称之为feature
分支。这就像是你在游戏中开始一个新任务或探索一个新区域。
git checkout -b feature/new-adventure
游戏过程:在分支上开发
就像在《GD版霸王的大陆》中一样,通过各种内政,战争等措施,让自己的势力强大起来。开发者在这个新的feature
分支上编写代码、添加功能或修复错误。每一个重要的进展都像是在游戏中你拿到了S级装备,收服了一个厉害的武将,你可能会保存游戏以防丢失进度。
保存游戏:提交更改
在游戏中,每当你达到一个关键点,你可能会保存游戏。在 Git 中,这称为提交(commit)。每次提交都记录了那一刻代码的状态,就像是游戏中的存档点,允许你在未来需要时“读档”回到这一状态。
git add .
git commit -m "Add new feature or fix a bug"
通过上述代码,可以将你的进度保存在本地。相当于你存了一个档。
读档:切换分支或回退
如果在游戏中你走错了路或遇到了障碍,你可能会重新加载之前的存档。在 Git 中,如果新功能的开发出现问题,你可以切换回之前的状态,或者切换到另一个分支去尝试不同的解决方案。
如果你之前在多个档位上进行存档,那么你可以读取不同的档位来回到对应的游戏进度。
#切换不同的分支
git checkout main
git checkout -b feature/alternative-solution
合并进度:合并分支(这个有点勉强)
这个在游戏中的理解是,比如在一个关键时刻,你看到你心怡的城防守空虚,同时,诸葛亮出来了,你想收他,但你不确定下个月诸葛亮还在不在这个城市里。所以你可以先存个档,尝试去打你心怡的那个城,找到了套路后,再回到原先的档,再去收服诸葛亮。你可以比较这两者的过程,再综合考虑游戏接下来的方向。
在 Git 中,一旦feature
分支上的工作完成并通过测试,就会将这些更改“合并”回主分支(main
或dev
),这确保了所有的好的改动都被纳入主游戏。
git checkout main
git merge feature/new-adventure
发布版本:标记发布
就像游戏达到了一个重要的里程碑并发布了新版本一样,软件开发中的新功能完成后,你可能会在 Git 中标记一个新的版本,这标志着项目的一个稳定和重要的状态。
git tag -a v1.0 -m "Release version 1.0"
git push --tags
多人协作:推送和拉取 (游戏云存档)
在多人游戏中,玩家们需要互相合作并共享资源。在 Git 中,通过推送(push)和拉取(pull)操作,开发者可以与远程仓库同步,分享他们的进度或更新他们本地的代码库,以保持团队协作的同步。
也可以理解成,一个人在不同的设备玩游戏,希望能保持相同的进度。
git fetch origin # 拉取远程仓库信息到本地,不下载具体文件
git push origin main #向远程仓库推送更新
git pull origin main # 从远程仓库下载项目内容
通过这个游戏化的类比,希望你能更好地理解 Git 的工作机制。Git 不仅是开发者的强大工具,也是一个协作和版本控制的游戏,每个提交都是一个存档点,每次合并都是一次胜利的集成。
备注
origin
代表什么含义?
origin
代表远程仓库,是远程仓库的一个标签。代指一个具体的远程仓库地址。是一个约定俗成的名称。如果你使用git clone 从远程仓库拉取项目,会自动将远程仓库名为origin