• 发文
  • 评论
  • 微博
  • 空间
  • 微信

一文总结GitHub使用指南

磐创AI 2020-06-01 09:47 发文

总览Git和GitHub是任何想要编程的数据科学专业人员的必备工具在此面向初学者的综合指南中,可以了解到Git和GitHub的相关内容和意义介绍“一个人能做的事情很少,但我们一起,就可以做很多事情。” ——海伦·凯勒听说过版本控制吗?当我开始编程时,我还没听说过这个工具。尤其是在为各种数据科学任务编写代码时头晕目眩,那时还没有意识到编写高效代码的重要性以及管理整个代码库的必要性。直到进入这个行业时,才明白版本控制的重要性。我学到的第一件事是清楚了Git和GitHub的意义。虽然一直很了解它们(经常使用它们来克隆Google Research和其他顶级数据科学组织的开源代码),但从未真正理解它们的真正用途。版本控制之美对我来说是一个启示。我可以创建一个远程项目,让我所有的团队成员同时独立地处理不同的功能,但在一天结束时仍然有一个稳定的运行代码,这种方式让我着迷。瞬间,我发现了一个解决在协作项目时曾经面临的问题的灵丹妙药。我非常高兴与你分享这篇有关Git和GitHub的文章。我们将介绍这两种工具的工作方式以及如何使用它们使你的数据科学项目更容易跟踪。作为数据科学家,你需要对这些工具有扎实的了解。你不仅会面临有关此问题的面试问题,而且你将在数据科学领域中非常依赖Git和GitHub。如果你正在与一个项目的其他数据科学家合作(这种情况经常发生),那么有时你必须更新一段代码或一个功能。Git和GitHub将在这里帮助你创建更好的工作流程。无论你进行什么更改,你都可以轻松地将其提供给所有协作者。如果你输入有误,也可以随时回到以前的版本目录什么是Git?什么是GitHub?熟悉Git术语Git入门初始化存储库配置Git了解如何在Git中提交文件查看日志在GitHub上上传到远程存储库将Git远程添加到你的存储库使用Push克隆GitHub存储库分支与合并使用Pull为世界贡献力量尾注让我们深入了解Git和GitHub的世界!什么是Git?Git(https://git-scm.com/) 是一种广泛使用的版本控制系统(Version Control System ,VCS),可让你跟踪对代码所做的所有修改。这意味着,如果新功能引起了任何错误,都可以轻松回到以前的版本。但是Git不只是VCS,它还是分布式VCS。这意味着项目的每个协作者都将拥有在本地计算机上所做更改的历史记录,因此人们可以处理项目的不同功能,而不必与托管该项目的远程版本服务器进行通信。你可以轻松地将对项目所做的任何更改与远程副本合并,这将大大提高工作效率。由于它是用C语言编写的,所以速度和性能从一开始就在Git中根深蒂固。除此之外,在实际保存对项目的任何更改之前,Git还提供了大量缓存区。如果你想了解更多有关Git的信息,请访问其官方网站(https://git-scm.com/about/branching-and-merging) ,找到问题的答案!什么是GitHub?GitHub(https://github.com/) 是一个广泛使用的版本控制平台,其核心是Git,它使你可以托管项目的远程版本,所有协作者都可以从中访问它。不仅你自己的团队成员,而且GitHub的任何成员都可以为你的代码做出贡献(当然,如果你选择接受所做的更改)。我们将在本文中详细讨论这些。GitHub就像一个社交平台,你可以在其中找到大量带有其代码的开源项目。在该平台上可以找到所有新兴技术。你可以在惊人的项目上进行合作,并就自己的贡献进行讨论!这将是你找到的最佳开源平台,也是数据科学家的梦想!你可以在GitHub看看我们最好的开源数据科学项目,每月都收集在这里:(https://www.analyticsvidhya.com/blog/tag/github-repositories)在GitHub上可以做很多事情,让我们开始吧。熟悉Git术语存储库(Repository)Repository或Repo是一个文件夹,其中包含所有项目文件和每个文件所做的修订历史。在项目的整个生命周期中,将使用项目的两个存储库:远程存储库和本地存储库:远程存储库包含你的项目,任何人从任何地方都可以访问它。你的远程存储库位于GitHub服务器上,任何人都可以访问它们本地存储库是驻留在本地计算机上的远程存储库的副本。你所做的所有更改将保存在本地存储库中。除非你将它们推送到远程存储库,否则你的同伴开发人员将无法看到它们克隆(Cloning)git clone < Repo-URL >克隆意味着在本地计算机上创建远程存储库的副本。现在,你可以在本地计算机上对项目进行更改。提交(Commit)git commit -m “< commit message >”提交更改时,将对文件所做的更改保存在repo中。在本地计算机上使用Git时,使用commit命令会将文件保存在本地存储库中,要在远程存储库中进行这些更改,你可以使用push命令。推送(Push)git push origin < branch >Push命令允许你将本地存储库上的所有更改传输到远程存储库上。传输之后,所有其他开发人员都可以访问你所做的更改,并且他们可以更新其本地存储库。拉取(Pull)git pull < remote-repo >如果push意味着将代码传输到远程存储库,则Pull命令允许你将所有更改从远程存储库传输到本地存储库。因此,开发人员将其推送到远程存储库的任何更改,都可以使用pull命令将其转移到本地存储库中。你还需要了解一些术语,但现在不需要。我们将在本文的后半部分详细介绍它们。现在,让我们创建我们的第一个GitHub存储库!Git入门你应该做的第一件事是在系统上下载Git。对已经准备好的人表示敬意!其他人,请转到此处(https://git-scm.com/downloads) 为你的操作系统下载Git。这很简单,你可以很快完成。现在,Git程序旨在与Unix风格的命令行环境一起使用。Linux和macOS已经在其本地命令行终端中为此提供了一个接口。因此,我在本文中使用的所有git命令都可以在其终端上正常工作。但是,Windows具有完全不同的命令行界面,称为命令提示符,它不是Unix风格的命令行环境,那么我们该怎么办?不用担心,你在安装Git时已经安装了Git Bash。Git Bash是Windows的命令行界面,可以模拟Git命令行,因此只要你在Git Bash中实现Git命令,就可以了。我将交替使用术语“终端”或“命令行”来指代macOS和Linux用户的命令行环境,以及Windows用户的Git Bash。我要你做的下一件事是创建一个项目文件夹,你将在其中保存本地存储库,然后按照以下步骤在该项目文件夹中打开终端:打开终端或Git Bash键入命令cd,这意味着更改目录(或文件夹)导航到项目文件夹所在的位置,但不要打开它现在,只需将文件夹拖放到终端内即可,这会将终端导航到你的项目目录/工作目录准备好开始使用Git!初始化存储库存储库或存储库是一个文件夹,其中包含所有项目文件和对每个文件进行的修订。你在上面创建的项目目录不是存储库,一个存储库需要使用git init命令(https://git-scm.com/docs/git-init) 初始化。完成此操作后,将在项目/工作存储库中创建一个隐藏的.git文件夹,这是你本地的Git存储库。如果看不到它,可能是因为它是隐藏的,你需要更改设置中的某些属性以使其可见,但是也不用担心,即使你没有看到它,它仍然存在。Git会将你对项目文件所做的所有更改存储在此文件夹中。配置Git但是在我们对存储库进行任何更改之前,我们希望Git知道我们是谁。我们可以使用git config命令来做到这一点。使用此设置,我们可以设置用户名和用户电子邮件地址。现在,每次我们提交时,Git都会保存此信息,以便你知道谁进行了更改。git config — global user.namegit config — global user.email如果使用–global选项,则Git将为系统中的所有存储库保存此信息,如果只希望为该特定存储库保存信息,则可以将其省略。了解如何在Git中提交文件现在,你可以开始构建项目并将文件添加到项目目录。我的项目是用不同的编程语言编写“ Hello world”,因此我将为此目的在我的项目目录中添加一些文件,你也应该对项目目录执行相同的操作,因为它现在为空。创建文件并将其添加到项目目录后,你可以使用git add <file-name>将它们添加到本地Git存储库中。如果要一次添加多个文件,请使用git add。我们完成了吗?提交更改的命令不是用别的命令吗?你是绝对正确的!我们尚未将文件添加到本地存储库。我们刚刚告诉Git,已经进行了一些更改,我们希望将这些更改保存在下一次提交/保存中,到目前为止,这些“added”文件位于一个名为“ 暂存区”的位置。暂存区是工作目录和本地repo之间的一个中间位置,在将所做的任何更改提交到repo之前,都可以在这里进行检查。你可以使用git status检查临时区域的状态你将看到与上面显示的消息相似的消息,该消息告诉你所做的更改需要提交,此处将显示所有挂起的提交。现在,你可以对你所做的所有更改(这些更改反映在暂存区中)进行快照,并使用Git commit-m“<commit message>”将它们保存在Git repo中你的提交消息应该简洁明了,这样其他开发人员就可以轻松地确定你为什么要进行这种更改。完成后,你将收到以下消息:现在,所有文件都已提交到Git存储库中。你可以检查暂存区的状态,这一次它将反映没有要提交的内容:此后,每当你对任何文件(如错误修复程序或其他任何文件)进行更改并将其添加到暂存区时,Git将知道对哪些文件进行了更改,并将在提交中记录文件的全部内容。我将对我的一个代码文件进行一些更改,并在更改后提交:如你所见,当我再次添加文件时,Git非常聪明,知道我只对单个文件进行了更改,这反映在其输出中。在此之后我所做的提交仅更新了该特定文件,而没有更新其他文件。查看日志版本控制的重点是保留所做更改的记录,你可以使用git log命令(https://git-scm.com/docs/git-log) 执行此操作,它为你提供了按时间顺序进行的所有提交的完整视图:如你所见,我的姓名,电子邮件地址,时间戳和提交消息都反映在日志中,这使得跟踪谁进行了哪些更改以及确定bug何时首次引入到项目中变得相当容易。在GitHub上上传到远程存储库到目前为止,我们都还在本地存储库上工作,这意味着所做的所有更改都已在你的本地计算机上进行了跟踪,而我们的开发人员目前还看不到它们,为此你需要创建一个远程存储库——一个任何地方任何人都可以访问的存储库,这就是GitHub的用武之地!你的远程存储库位于GitHub服务器上,任何人都可以访问它,因此让我们创建一个远程存储库!注意:你需要为此创建一个GitHub帐户。创建远程存储库的步骤在右上角,单击+号,然后单击新建存储库:在下一页上,为你的存储库命名并提供简短描述,完成后,点击创建存储库:太棒了!你刚刚创建了第一个远程存储库。GitHub在2019年1月向个人免费提供了私有存储库。在2020年4月,GitHub对所有人(包括组织)免费提供了私有存储库。将Git远程添加到你的存储库创建GitHub存储库后,GitHub将提示你将文件上传到远程存储库:由于我们已经创建了本地存储库,因此首先需要同步本地和远程存储库。我们可以使用git remote add origin <URL>来做到这一点该命令在本地和远程存储库之间创建连接。一旦这样做,我们就不再需要每次都通过URL引用远程存储库,我们可以使用名称origin来引用远程存储库。使用Push现在已经添加了远程存储库,你所要做的就是将你的提交从本地存储库推送到远程存储库,以便所有开发人员都可以查看更改。你可以使用git push -u origin <branch-name>将本地存储库转移到GitHub服务器上的远程存储库Origin是我们的远程存储库的名称。现在,我们所有的合作者都可以访问此新更新的存储库。克隆GitHub存储库我们知道了如何创建自己的本地存储库并将其推送到GitHub上。现在,如果你不是创建此存储库的人,则必须在本地计算机上复制此存储库。将项目上载到远程存储库后,开发人员可以使用git clone命令(https://git-scm.com/docs/git-clone) 获得此存储库的副本,然后开发人员可以处理其本地存储库副本,对其进行更改,然后将其上传到远程存储库上。从GitHub克隆远程存储库很容易,只需转到要克隆的存储库,然后单击“克隆”或“下载”按钮即可复制URL:你也可以直接从此处以Zip文件的形式下载存储库,但是我们将使用Git从我们的终端下载它。要将其克隆到本地计算机,你需要转到终端并在以下命令中提供URLgit clone < URL >这将在本地计算机上制作该存储库的本地副本。你会注意到,在当前目录内创建了一个与远程存储库同名的文件夹,该文件夹是你的项目/工作目录,其中包含本地Git存储库,你需要在此目录中导航以更改本地存储库。使用cd <存储库名称> /在你的工作目录中导航:现在你已经在工作目录中,可以进行所需的任何更改。如果你喜欢这些更改并认为它将解决一个错误或为该项目添加一个非常酷的功能,则只需先提交你的本地存储库,然后将其推送到GitHub上的远程存储库,以使你的开发人员可以及时了解最新信息、新的变化。分支与合并分支是Git的最基本特征之一。分支使你可以处理master分支上存在的主要项目代码的新功能或错误修复。分支就像对提交的引用。你可以对分支进行任何更改,即使你搞砸了这一分支,也请放心,因为它不会损害你的实际工作代码。分支使你可以试验新功能或新想法,甚至可以并行创建多个分支以试验不同功能。任何数量的人都可以在特定分支上工作,并且你可以根据需要拥有任意数量的分支。你可以使用git branch创建一个新分支,这将包含master分支中存在的所有文件,你也可以在此分支上更改文件。一旦确信代码运行良好,就可以使用git merge命令(https://git-scm.com/docs/git-merge) 将其与master分支集成。到目前为止,我们一直在master分支上工作。现在,我们将看到如何使用git branch <branch-name>创建一个新分支。这将创建一个新分支,你可以使用git branch命令检查:Git将始终通过在每个命令的括号中提到它来更新你正在处理的分支,这可以确保你在正确的分支上工作。现在让我们使用git checkout <branch-name>在另一个分支中工作现在,我正在循环分支中工作,我想通过在我的代码中添加一个for循环来更改存储库中的文件之一,然后提交更改:完成之后,让我回到主分支并检查所做的更改:这是怎么回事?我所做的更改未反映在master分支中!这正是应该发生的情况。进行提交时,我位于循环分支内,因此所做的更改保存在该特定分支中,因此更改未提交给master分支,我的master分支上的代码还是安全的。接下来,如果我想将这些更改提交到master分支,因为它没有任何错误,而且我喜欢新的“循环”功能,则可以使用 git merge <branch name> -m “<message>”命令从要将其合并到的分支上(在本例中是主分支)执行此操作,这将使循环分支与主分支合并:太棒了!我们在主代码中添加了功能齐全的新功能,现在剩下要做的就是将这些更改提交到远程存储库!使用Pull你需要知道的最后一个Git命令是pull,这使你可以从远程存储库中获取任何更新,并将其与本地存储库合并。例如,克隆了远程存储库后,有人在某个分支上对远程存储库进行了更新,现在你需要获取这些更改并与本地存储库合并,以便你可以及时了解这个新的更改。假设我在Python代码文件中添加了for循环之后,有人在Java代码文件中添加了for循环,因为我的代码文件没有for循环:我可以使用pull命令更新本地存储库。你所要做的就是键入git pull origin <branch-name>这将更新我的本地存储库,现在在我的Java文件中也有一个for循环!为世界贡献力量使用GitHub,你可以浏览任何人的存储库,想必那就是开源之美吧! 有时候,你会真正喜欢某个人的项目,并且很想为该项目做出贡献,或者如果你想建议某人的项目最好进行某些修复,然后发送请求,以便你可以为他们的项目做出贡献。这可以通过称为fork的过程来实现。fork某人的存储库,请转到存储库页面,然后在顶部单击Fork,这将在你的帐户中创建存储库的副本。我已经fork了Analytics Vidhya的Data Science Hacks存储库(https://github.com/kunalj101/Data-Science-Hacks) ,对于需要提高效率的所有数据科学家来说,这是一个很好的存储库!现在,你可以将此存储库克隆到本地计算机上,进行所需的更改或要添加的功能,然后将其推送到远程副本。最后,你可以请求项目的创建者接受所做的修复或添加的新功能,这称为拉取请求(pull request)。当你浏览到配置文件中的存储库时,你将看到一个名为“ New  pull request ” 的选项:单击该按钮,GitHub将带你进入下一页,该页面将显示你希望原始创建者合并的分支:创建拉取请求后,系统将提示你定义对原始创建者的存储库所做的更改,你可以根据需要对所做的更改提供尽可能多的描述,最后发送拉取请求。现在原始创作者们要么接受你的更改,然后将其与分支合并,在这种情况下,祝贺你刚刚做出了开源贡献,你应该为自己感到骄傲!但是,即使没有,也不要伤心欲绝。还有许多其他开放源代码项目正在等待你的关注,因此继续前进,继续做出贡献!如果你想为开源项目做贡献,但又不知道从哪里开始,则可以从我为本文创建的存储库开始——“Hello-world”(https://github.com/aniruddha27/Hello-world) 。克隆它,对其进行更改,然后发送拉取请求,我会接受所有人的!让我们一站式学习每种编程语言!尾注在这里,我们确实讲了很多内容,如果你耐心地实现了本文中我所做的一切,请给自己一个鼓励,这是你应得的!但这只是冰山一角。Git和GitHub比我在本文中介绍的内容要多得多。如果你想继续对存储库进行探索和贡献,我建议你阅读下文,其中列出了一些最具创新性的机器学习GitHub项目。

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码