当前位置: 首页 > 科技观察

Git系列(一):什么是Git

时间:2023-03-13 18:08:23 科技观察

欢迎阅读Git版本控制系统使用系列教程!通过本文的介绍,您将了解Git的用途以及哪些人应该使用Git。如果您是开源世界的新手,您很可能遇到过一些在Git上托管代码或发布可使用版本的开源软件。其实不管你知不知道,你都在使用基于Git的版本管理软件:Linux内核(即使你手机电脑上不用Linux,你访问的网站也是运行在Linux系统上的))、Firefox、Chrome和许多其他项目通过Git代码存储库与世界各地的开发人员共享他们的代码。换句话说,你可以通过Git与其他人共享你的代码吗?你可以在家里或公司私下使用Git吗?您必须通过GitHub帐户使用Git吗?为什么要用Git什么?Git有什么优点?Git是我唯一的选择吗?所有关于Git的问题都会让我们感到困惑。那么,忘掉之前对Git的了解,让我们重新走进Git世界的大门吧。什么是版本控制系统?Git首先是一个版本控制系统。当今市场上有许多不同的版本控制系统:CVS、SVN、Mercurial、Fossil,当然还有Git。GitHub和GitLab等许多服务都基于Git,但您也可以只使用Git而无需使用其他附加服务。这意味着您可以私下或公开使用Git。如果您曾与其他人一起处理过电子文档,您就会知道传统的版本管理工作流程。开始很简单:你有一个原始版本,你把这个版本发给你的同事,他们在收到的版本上做一些修改,现在你有两个版本,然后他们自己修改,更新后的版本会发回给你。您将他们的更改合并到您拥有的版本中,现在这两个版本合并为一个最新版本。然后,你修改了你手上的最新版本,同时,你的同事也修改了他们的合并前版本。现在你有3个不同的版本,分别是合并后的最新版本,你的修改版本,你同事手里的修改版本。此时,你的版本管理工作开始变得越来越混乱。正如JasonvanGumster在他的文章中指出的那样,即使是艺术家也需要版本控制,并且这种趋势已经在个人中被发现。无论您是艺术家还是科学家,开发某种实验版本的情况并不少见;在你的项目中,可能有一个版本成功并将项目推向新的高度,也可能有一个版本惨遭失败。失败。因此,您不可避免地会得到一堆名为project_justTesting.kdenlive、project_betterVersion.kdenlive、project_best_FINAL.kdenlive、project_FINAL-alternateVersion.kdenlive等的文件。无论你是修改一个for循环,还是一些简单的文本编辑,一个好的版本控制系统都会让我们的生活更轻松。Git快照Git可以创建项目快照并将它们存储为唯一版本。如果你把项目带向了错误的方向,你可以回滚到上一个正确的版本并开始尝试另一个可行的方向。如果你在与他人协作,当有人将他们的更改发送给你时,你可以将这些更改合并到你的工作分支中,然后你的同事可以获得最新的合并版本,并在此基础上继续工作。Git并不神奇,所以冲突仍然会发生(“你更改了文件的最后一行,但我删除了整行;我们如何处理这些冲突?”),但一般来说,Git会生成一个历史版本所有更改都为您保留,甚至允许平行版本。这为您保留了以任何方式处理冲突的能力。分布式Git在不同机器上为同一个项目工作是一件复杂的事情。因为当你开始工作时,你希望获得项目的最新版本,然后基于此进行更改,最后与你的同事共享这些更改。传统方法是通过笨拙的在线文件共享服务或老式的电子邮件附件,这两种方法效率低下且容易出错。Git天生就是为分布式工作而设计的。如果你想参与一个项目,你可以clone这个项目的Git仓库,然后像这个项目只有你本地的版本一样修改这个项目。最后,通过一些简单的命令,您可以拉取其他开发人员的更改,也可以将您的更改推送给其他人。现在您不必担心谁拥有最新版本,或者谁的版本存储在哪里。每个人都在本地开发,然后将更新推送或拉取到一个共同的目标。(或者不是一个共同的目标,取决于项目是如何开发的)。Git接口最初的Git是一个运行在Linux终端上的应用软件。不过,得益于Git的开源和良好的设计,全世界的开发者都可以为Git设计不同的访问接口。Git是完全免费的,并且已经打包在Linux、BSD、Illumos和其他类Unix系统中。Git命令看起来像这样:$git--versiongitversion2.5.3可能最著名的Git访问界面是基于Web的,像GitHub、开源GitLab、Savannah、BitBucket和SourceForge都是基于Web的Git界面。这些站点为面向公众和面向社区的开源软件提供最大的代码托管。在一定程度上,基于浏览器的图形界面(GUI)可以尽可能地减缓Git的学习曲线。下面是GitLab界面截图:更进一步,第三方Git服务商或者独立开发者甚至可以基于Git开发一个不基于HTML的自定义前端界面。这种界面可以让你在不打开浏览器的情况下轻松使用Git进行版本管理。对用户最透明的是直接集成到文件管理器中。KDE文件管理器Dolphin可以直接在目录中显示Git状态,甚至支持提交、推送和拉取更新操作。Sparkleshare使用Git作为其Dropbox风格文件共享界面的基础。有关更多信息,请查看Gitwiki,这是一个显示许多GitGUI项目的(长)页面。谁应该使用Git?是你!我们应该更关心什么时候使用Git?以及Git的用途是什么?我什么时候应该使用Git?我应该用Git做什么?想要了解更多使用Git,我们必须比平时更多地考虑文件格式。Git旨在管理源代码,在大多数编程语言中,源代码意味着文本行。当然,Git不知道您是将这些文本视为源代码还是下一部伟大的美国小说。因此,只要文件内容是由文本组成的,使用Git来跟踪和管理其版本是一个不错的选择。但什么是文本?如果您在LibreOffice等办公程序中编辑某些内容,它通常不会生成纯文本内容。因为通常复杂的应用软件会将原文内容封装一层,比如将原文内容用XML标记语言打包,然后再封装成Zip包。这种封装原始文本内容的方式可以保证当你将文件发送给他人时,他们可以看到你在办公软件中编辑的内容和特定的文本效果。奇怪的是,虽然你的需求往往很复杂,比如保存Kdenlive项目文件,或者保存从Inkscape导出的SVG文件,但实际上使用Git来管理XML文本这样的纯文本内容是最简单的。如果你使用的是Unix系统,可以使用file命令查看文件内容:$file~/path/to/my-file.blahmy-file.blah:ASCIItext$file~/path/to/different-file.kra:Zipdata(MIMEtype"application/x-krita")如果还是不清楚,可以使用head命令查看文件内容:$head~/path/to/my-file.blah如果你可以基本看懂输出的文字,这个文件很可能是一个文本文件。如果只是偶尔在一堆乱码中看到几个熟悉的字符,那么这个文件可能不是文本文件。准确地说:Git可以管理其他格式的文件,但它将它们视为二进制大对象(blob)。两者的区别在于,在一个文本文件中,Git可以明确地告诉你这两个快照(或提交)之间有3行已经被修改。但是如果你在两次提交之间编辑一个图像,Git将如何指出这个修改?事实上,由于图像不是由一些可以添加或删除的有意义的文本组成的,所以Git并没有明确描述这种变化。当然,我个人希望图片的编辑能简单到把文字“<天空>丑陋的蓝绿色”改成“<天空>天蓝色飘着蓬松的白云”,但事实上编辑上面的图片并不是那么简单。二进制大对象(blob),例如png图标、电子表格或流程图通常放在Git上。虽然,我们知道在Git上管理这么大的文件并不直观,但是如果你需要使用Git来管理这样的文件,你也不用太担心。如果您正在处理一个同时生成文本文件和BLOB的项目(例如视频游戏中的常见场景,其中图形和音频材料与源代码一样重要),那么您有两条路:要么开发自己的解决方案,例如使用对共享网络驱动器的引用;或者使用Git插件,比如JoeyHess的gitannex和Git-Media项目。你看,Git确实是一个任何人都可以使用的工具。它是一个强大而有用的文件版本控制工具,它并不像您最初想象的那么可怕。