在本系列的第一篇文章中开始使用Git时,我们创建了一个简单的Git存储库,将其连接到我们的计算机,并向其中添加了一个文件。在本文中,我们将学习一些关于Git的其他内容,即如何克隆(下载)、修改、添加和删除Git存储库中的文件。让我们克隆假设您在GitHub上已经有一个Git存储库并想从中获取您的文件-也许您丢失了计算机上的本地副本,或者您正在另一台计算机上工作,但是想要访问存储库中的文件,怎么办?你应该做什么?从GitHub下载文件?这是正确的!在Git术语中,我们称其为“克隆”。(您也可以将存储库下载为ZIP文件,但我们将在本文中探索克隆。)让我们克隆在上一篇文章中创建的名为Demo的存储库。(如果您还没有创建Demo存储库,请跳回到那篇文章并在继续之前执行这些步骤。)要克隆文件,只需打开浏览器并导航至https://github.com//Demo(其中是您存储库的名称。例如,我的是https://github.com/kedark3/Demo)。导航到该URL后,单击“克隆或下载”按钮,您的浏览器应如下所示:正如您在上面看到的,“使用HTTPS克隆”选项已打开。从下拉框中复制您的存储库地址(https://github.com/<您的用户名>/Demo.git),打开终端并输入以下命令将GitHub存储库克隆到您的计算机:gitclonehttps://github.com//Demo.git然后,要查看Demo目录中的文件列表,请输入以下命令:lsDemo/终端应如下所示:修改文件现在我们已经克隆了存储库,让我们修改文件并在GitHub上更新它们。首先,一条一条输入以下命令,切换目录到Demo/,查看README.md中的内容,向README.md添加新的(附加的)内容,用gitstatus查看状态:cdDemo/lscatREADME.mdcho"AddedanotherlinetoREAMD.md">>README.mdcatREADME.mdgitstatus如果你一个一个地运行这些命令,终端会是这样的:让我们看看gitstatus的输出,看看它意味着什么。不用担心这样的语句:OnbranchmasterYourbranchisup-to-datewith'origin/master'."。因为我们还没有学过这个。(LCTT译注:学了就知道)下一行says:Changesnotstagedforcommit(changesnotplannedforcommit);这告诉你它下面列出的文件还没有被标记为准备好(“stage”)提交。如果你运行gitadd,Git会将这些文件标记为Readyforcommit(准备提交);换句话说,Changesstagedforcommit。在我们这样做之前,让我们使用gitdiff命令检查我们添加到Git的内容,然后运行??gitadd。这是终端输出:Let'sbreak它向下:diff--gita/README.mdb/README.md是Git比较的(在本例中是README.md)。---a/README.md将显示任何内容。+++b/README。md将显示从文件中添加的任何内容。添加到文件中的任何内容都以绿色文本打印,行首带有+号。如果我们删除任何内容,它将以红色文本打印,并在行首带有-号该行的ng。现在gitstatus显示Changestobecommitted:(更改将被提交),并列出文件名(即README.md)和文件发生的地方(即它已被修改并准备提交)。提示:如果你已经运行了gitadd,现在你想看看文件有何不同,通常gitdiff不会输出任何东西,因为你已经添加了文件。相反,您必须使用gitdiff--cached。它会告诉你当前版本和Git添加的文件的先前版本之间的区别。您的终端输出将如下所示:将文件上传到您的存储库我们已经用一些新内容修改了README.md文件,现在是时候将它上传到GitHub了。让我们提交更改并将它们推送到GitHub。运行:gitcommit-m"UpdatedReadmefile"这告诉Git你正在“提交”已“添加”的更改,正如你可能还记得本系列的第***部分,添加一条消息说明你在commit你所做的很重要,这样当你以后回顾你的Git日志时,你就会知道你在做什么。(我们将在下一篇文章中更多地关注这个主题。)更新的自述文件是这次提交的消息——如果您认为这不能正确解释您所做的事情,那么请根据需要编写您的提交消息.运行gitpush-uoriginmaster,它会提示您输入用户名和密码,然后将文件上传到您的GitHub存储库。刷新GitHub页面,您应该会看到刚刚对README.md所做的更改。终端右下角显示我提交了更改,检查了Git状态,并将更改推送到GitHub。gitstatusshows:Yourbranchisaheadof‘origin/master’by1commit(use"gitpush"topublishyourlocalcommits)***行表示本地仓库中有提交,但在origin/中没有大师(即在GitHub上)。下一行指示我们将这些更改推送到origin/master中,这就是我们所做的。(请参阅本系列的第一篇文章,以刷新您对本例中origin含义的记忆。我将在下一篇讨论分支时解释master的含义。)添加一个新文件到Git现在我们已经修改了一个文件并在GitHub上更新了它,让我们创建一个新文件,将它添加到Git,并上传到GitHub。运行:echo"Thisisanewfile">>file.txt这将创建一个名为file.txt的新文件。如果您使用cat查看它:catfile.txt您将看到该文件的内容。现在继续运行:gitstatusGit报告您的存储库中有一个未跟踪的文件(名为file.txt)。这是Git告诉您计算机上的存储库目录中有一个新文件,但您没有告诉Git,Git也不会跟踪您所做的任何更改。我们需要告诉Git跟踪这个文件,以便我们可以提交文件并将其上传到我们的存储库。下面是执行这个操作的命令:gitaddfile.txtgitstatus终端输出如下:gitstatus告诉你file.txt被修改了,是Git的新文件,Git不知道前。现在我们已经将file.txt添加到Git,我们可以提交更改并将它们推送到origin/master。Git现在已经将这个新文件上传到GitHub;如果刷新GitHub页面,您应该会在GitHub的存储库中看到新文件file.txt。通过这些步骤,您可以创建任意数量的文件,将它们添加到Git,然后提交并将它们推送到GitHub。从Git中删除文件如果我们发现我们犯了一个错误并且需要从我们的存储库中删除file.txt怎么办?一种方法是使用以下命令从本地副本中删除文件:rmfile.txt如果你现在执行gitstatus,Git会说有一个文件没有暂存提交(notplannedforcommit),并且它已经从从中删除的存储库的本地副本。如果我们现在运行:gitaddfile.txtgitstatus我知道我们正在删除这个文件,但是我们仍然运行gitadd因为我们需要告诉Git我们正在做的更改,gitadd可以让我们添加新文件,修改一个已经存在的文件内容,或者文件从版本库中删除的时候。实际上,gitadd会考虑所有更改并提交这些更改。如有疑问,请仔细查看下面终端屏幕截图中每个命令的输出。Git会告诉我们删除的文件正在提交。一旦您提交此更改并将其推送到GitHub,该文件也将从GitHub的存储库中删除。运行以下命令:gitcommit-m"Deletefile.txt"gitpush-uoriginmaster现在你的终端看起来像这样:你的GitHub像这样:现在你知道如何从你的存储库克隆、添加、修改和删除文件。本系列的下一篇文章将研究Git分支。