用git编写自己的故事

大家好🙂在继续订购列表文本之前,我要感谢所有发送补丁的人员和每个用户,以庆祝git 2.16的发布,总共在更新和更正之间有4000行,虽然我的第一个版本说得不太好,但确实表示您的好意🙂谢谢! 现在,我将告诉您一个小秘密,直到现在,我还没有坐下来写一篇文章并对此进行了深思熟虑,通常我只是连续写一遍,然后好蜥蜴就喜欢上了纠正我的打字错误🙂所以也感谢他。

当我们谈论撰写文章时,这不是最好的方法,据说它应该有一个目标,并组织一个结构,并标记一些要点和评论等。现在,这不仅适用于一般博客,而且对于假装好的软件🙂为此任务,几年前在内核开发中使用的版本控制软件出现了一些问题之后,它诞生了 git 🙂

在哪里学习 git?

关于git的文档数量是惊人的,即使我们只是阅读了安装随附的手册页,我们也会有大量的阅读资料。 我个人发现 git书 设计得很好,即使我翻译了第7节的某些部分,我仍然有一些,但是给我些时间😛也许在这个月我可以翻译该节剩下的内容。

git是做什么的?

Git旨在快速,高效,简单并支持大量信息,毕竟内核社区是为他们的软件创建的,它是世界上最大的自由软件联合作品之一,拥有数百个每小时代码行数超过一百万行。

git的有趣之处在于它维护数据版本的方式。 过去(其他版本控制程序)在历史上某个时刻对所有现有文件进行了压缩,例如制作一个 备份。 当执行以下操作时,Git采用不同的方法 commit 标记历史点,该历史点具有一系列修改和工作,最终,随着时间的推移收集所有修改,并获得文件以能够压缩或标记为里程碑版本。 既然我知道所有这些听起来都很复杂,那么我将以一个超级基本的例子带领您进行一次神奇的旅程。

小计算工程

计算将是一个程序,该程序将找到给定数的平方,我们将用C进行计算,并且将尽可能地简单,因此不要指望我进行大量安全检查。 首先,我们要创建一个存储库,我将用Github来完成它,用一块石头杀死两只鸟:

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

我们添加了一些相当简单的内容,例如许可证(如果您想保护自己的作品,这很重要,就我而言,如果他们想将其用作基础,强迫他们分享结果:P)

现在我们去亲爱的码头, git clone 是负责下载位于 url 在我们的计算机上分配并创建本地副本。

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

现在让我们检查一下 git log 在我们的项目历史中发生了什么:

这里我们有很多不同颜色的信息information让我们尝试解释一下:

第一个黄线是“提交条形码”,每个提交都有自己的唯一标识符,您可以使用它执行很多操作,但是我们将其保存以备后用。 现在我们有 HEAD 的celeste和 master 绿色。 这些是“指针”,其功能是指向我们历史的当前位置(HEAD)以及我们正在计算机上工作的分支(master).

origin/master 是互联网的对应物, origin 是已分配给我们的默认名称 URL,而 master 是您在其中工作的分支机构...为了简单起见,那些拥有 / 是那些不在我们团队中,但指的是互联网上的内容。

然后,我们得到了作者,日期和时间以及提交摘要。 这是对历史上当时发生的情况的简短回顾,在许多项目中非常重要,并且有很多信息受到谴责。 让我们仔细看看命令中提交时发生了什么 git show <código-de-commit>

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

git show命令以补丁格式将我们带到该屏幕,您可以在历史上看到当时已添加的内容和已删除的内容(如果已删除内容),到目前为止,它仅向我们显示了记录 .gitignore,README.mdLICENSE.

现在开始做生意,写一个文件🙂我们将创建历史上的第一个里程碑😀:

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

简而言之,我们将创建一个程序,向我们显示执行该程序时传递的参数数量。

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

这很容易-现在让我们看一下以下有用的命令: git status

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

某种善良的灵魂已经翻译了git,以使其易于遵循,在这里我们有很多有用的信息,我们知道我们在master分支中,我们已经更新了 origin/master(Github分支),我们有未跟踪的文件! 为了添加它们,我们必须使用 git add,让我们尝试🙂

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

现在,我们有了一个新的绿色空间,其中显示了已添加到工作区的文件。 在这个地方,我们可以将更改分组以进行提交,该提交包含整个项目历史中的一个里程碑,我们将创建提交🙂 git commit

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

简短地解释一下,黄线是我们提交的标题,我写main.c只是一个视觉参考。 黑色文本说明了自上一次提交以来到现在所做的更改🙂我们保存了文件,我们将看到我们的提交保存在注册表中。

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

现在,我们将通过以下方式查看我们项目的历史 git log

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

再次在日志中,现在我们可以看到绿线和红线有所不同,这是因为在我们的计算机上,我们的提交比Internet上的提交高了一个commit🙂我们将继续工作,假设现在我想显示一个如果用户在程序中输入了多个参数,则会出现此消息(这会使计算器感到困惑🙂)

如我们所见,我们的程序已经发展了很多😀,现在我们有了 imprimir_ayuda() 在块中显示有关如何使用计算的消息 main() 现在我们对 if(我们将在另一时间在编程教程中看到的内容,现在只需要知道如果在计算中输入了两个以上的参数,程序便会结束并显示帮助。让我们执行它:

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

如您现在所见,它打印出已传递的数字而不是参数的数目,但是我在before之前没有告诉过您,出于好奇 echo $? 显示最后执行的程序的退出代码,即 1 因为它以错误结束。 现在,让我们回顾一下我们的故事如何发展:

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

现在我们知道我们比Github提前1次提交,即文件 main.c 已被修改,让我们通过执行以下操作来创建下一个提交 git add main.c  进而 git commit🙂

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

现在,我们已经更加具体了,因为我们已经实现了一个功能并更改了验证代码。 现在已经保存了,我们将回顾我们的最后更改。 我们可以看到它 git show HEAD

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

现在您可以看到红线和绿线,我们已经添加了库 stdlib.h,修改了许多代码并将功能添加到我们的故事中。

现在我们将看到日志:git log)

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

我们可以看到,我们比Github版本提前了两次提交,我们将使用的标记对等位 git push origin master

我们这样说,将我的提交发送到url origin 在树枝上 master

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

恭喜你! 现在您的更改在Github上了,您不相信我吗? 让我们回顾一下😉

拥有。 克里斯托弗·迪亚兹·里维罗斯(Christopher Diaz Riveros)

现在我们在Github上有3个提交

总结

我们已经涉及到最基本的方面 git,现在他们可以在他们的项目中创建一个简单的工作流,这几乎绝不是git可以完成的所有事情,但是对于开发人员或博客作者来说,这无疑是最实际和日常的工作。 我们还没有到达计算器的尽头,但是我们会再等一会儿。非常感谢您来到这里,我希望它可以帮助您参与多个项目😀问候


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   保罗

    您好...我不知道您是否在,但我看不到此报告中的图像...

    问候

  2.   保罗

    我的浏览器有问题。 抱歉给你带来不便。

  3.   Tecprog世界

    我仍然需要更详细地阅读它,我是新手。

  4.   吉列尔莫

    很棒的文章以git开头,尽管我建议记笔记以了解细节。
    有几件事我不清楚:
    有什么选择 添加.gitignore C虽然我想我会在练习时看到它,
    为什么在下一次git提交之前必须重做git add main.c,add main.c是否告诉git将该文件与网络版本进行比较? 它不会自动比较所有添加的文件以进行跟踪吗?

    1.    克里斯·阿德

      您好Guillermo🙂很好,您发现它很有用,可以回答您的问题:

      .gitignore是一个告诉git忽略哪些格式或模式的文件,在这种情况下,选择C会导致.o文件和编译时生成的其他文件被忽略,这很好,因为否则您的git会立即发疯每次编译和后续操作🙂您都可以通过cat或文本编辑器检查git在其C模板中忽略的多种格式。

      尽管git会跟踪添加到工作树中的每个文件,但是有必要专门选择哪些文件将进入下一个提交,举一个例子,让我们假设您的工作已导致您修改了5个不同的文件,能够看到结果。 如果您想更具体一点,并解释每个步骤的完成方式,可以执行git add file1;。 git commit; git add file2; git commit….3,4,5; git提交。 这样,您的故事就干净了,变化也得到了明确定义。 并且,如果您必须更改某些内容或还原(更高级的主题),则可以还原特定内容或添加特定内容,而无需更改其余内容。

      希望对您有帮助,谢谢,并感谢您的提问

    2.    克里斯·阿德

      PS:git add并不表示要与网络上的版本进行比较,但是与您工作中的上一个提交相比,如果它是本地的(绿色),它将与该版本进行比较;如果它是远程的(红色),则它将与该版本进行比较。与其他比较。 只是为了澄清😉

      1.    吉列尔莫

        完美,当然可以澄清。