我发现git很难理解,因为我找不到用于操作的单词的含义。我已经检查了字典中“ stage”的含义,但这些含义均与源代码管理概念无关。
在git的上下文中,“ stage”是什么意思?
git add file.ext
针对特定文件执行的操作,或git add .
影响所有已修改和未跟踪的文件。以这种方式添加的文件被称为“暂存”,它们将包含在下一个“提交”中。提交是您使用创建的工作的快照git commit -m "I wrote something"
。
我发现git很难理解,因为我找不到用于操作的单词的含义。我已经检查了字典中“ stage”的含义,但这些含义均与源代码管理概念无关。
在git的上下文中,“ stage”是什么意思?
git add file.ext
针对特定文件执行的操作,或git add .
影响所有已修改和未跟踪的文件。以这种方式添加的文件被称为“暂存”,它们将包含在下一个“提交”中。提交是您使用创建的工作的快照git commit -m "I wrote something"
。
Answers:
要上演一个文件就是精细准备它提交。Git及其索引允许您仅提交自上次提交以来所做更改的某些部分。假设您正在使用两个功能-一个已经完成,一个仍然需要完成一些工作。您想提交并回家(终于5点了!),但不想提交第二项功能的各个部分,但尚未完成。您上演您知道属于第一个特征的零件并提交。现在,您的提交是完成第一个功能的项目,而第二个功能仍在您的工作目录中进行中。
既然到目前为止,每个人都以“正式”的方式回答了问题,所以让我用替代方法来做到这一点,以借助隐喻的力量来增强学习。
因此暂存区域如下:
它的神奇!
分阶段是git提交过程之前的一步。也就是说,在git中的提交要分两个步骤进行:暂存和实际提交。
只要变更集位于登台区域中,git便允许您根据需要对其进行编辑(将登台文件替换为其他版本的登台文件,从登台中删除更改等)。
隐喻时间:
考虑一个场景,您打电话给搬家公司,将您的东西从旧公寓搬到新公寓。在执行此操作之前,您将仔细检查自己的东西,决定随身携带的物品和扔掉的物品,将其包装在袋子中,然后留在主走廊中。搬运工只需走过来,从走廊拿走(已经包装好的)袋子并运输它们。在此示例中,直到搬运工拿到东西之前,一切都处于分阶段:您决定去哪里,如何包装等等(例如,您可以确定一半的东西在搬运工到达之前就被扔掉了-这是一部分分期)。
从技术角度来看,登台还通过将所有操作划分为可能失败(登台)和不能失败(提交)的操作来支持事务提交:
在阶段成功完成之后,以事务方式实现git中的提交。登台中的几个步骤可能会失败(例如,您需要提交,但您的HDD已满99.9999%,并且git没有空间来执行提交)。这将导致暂存失败(您的存储库不会被部分提交损坏),并且暂存过程不会影响您的提交历史记录(在发生错误的情况下,它不会损坏您的存储库)。
除了其他出色的答案外,“ stage”的名称来自以下位置:
我检查了字典中舞台的含义,但这些含义均与源代码管理概念无关。
用英语来说,“登台”可能意味着
组织和参加(一个公共活动):UDF支持者在索非亚举行了示威游行
(来自http://oxforddictionaries.com/definition/stage)
git功能的名称“ staging”源于此含义:在进行分阶段时,您正在准备和组织提交。当然,提交与性能并不太相同,但这在VCS中是重要的事件:-)。
在大多数其他版本控制系统中,有2个存储数据的地方:您的工作副本(当前正在使用的文件夹/文件)和数据存储(版本控制决定如何打包和存储更改的位置)。在Git中,还有第三个选项:临时区域(或索引)。从本质上讲,这是一个装载平台,您可以在其中确定将哪些更改运出。
来源:http : //gitready.com/beginner/2009/01/18/the-staging-area.html
“阶段”是检入文件(即收集要添加到存储库中的更改)过程中的技术上必需的中间步骤。Git的作者选择使此步骤可见且持久,而其他VCS使其成为提交过程的过渡部分。所以这只是git给您的选择,因为它可以,为什么不呢?
我的看法是,git“ stage”给您的主要信息是其他VCS没有,您可以使用它来检查文件。实际上,这是一个未命名,未注释的本地提交,它为您完成所有工作并将其永久提交到存储库与根本不保存任何本地存储之间提供了一个中间步骤。
例如,假设您有一个功能已部分完成。它处于稳定状态,通过了所有测试,可以投入生产,但是您需要做更多的工作。您可以进行所有更改,然后继续使用该功能。
稍后,您可以选择仅提交已暂存的内容(并将该提交推送到远程存储库),或将新更改添加到暂存区域,然后一次全部提交,或仅撤消新更改并将您的工作目录恢复到上级更改时的状态。
实际上,完全可以完全跳过过渡区域-a
,git commit
如果您没有发现过渡区域有帮助的概念,则可以使用该选项。很多人跳过了暂存,GUI工具通常也允许这样做。
我的理解是,假设我正在开发登录功能,并且需要完成5个连续步骤。因此,这里的暂存将帮助您像
执行第1 步一样完成该步骤。
完成第2步后,现在第1步和第2步都是正确的阶段。
弄乱了步骤3没问题,结帐了最新的上一步步骤,即
完成所有5个步骤后,步骤2 同样,这意味着功能已完成,现在执行提交。