Git 什么&x2019;这是实现“;浮动标签”;用吉特?

Git 什么&x2019;这是实现“;浮动标签”;用吉特?,git,Git,我将我的网站保存在Git存储库中。它只是一个小型的个人网站,所以没有什么奇特的自动化;我将进行一系列更改,然后定期使用将站点推送到服务器。我喜欢跟踪哪些修订版已经上传,哪些还没有上传,现在我有一个名为push的分支,每次上传到服务器时,我都会将master合并到该分支中。(如果涉及任何其他分支,我会在推送之前将所有内容合并到master,这样只有master才会被合并到pushed) 这已经足够好了,但在我看来,使用“整个”分支似乎很奇怪,而我所关心的只是每次将一个提交标记为“这已被推送”。(是

我将我的网站保存在Git存储库中。它只是一个小型的个人网站,所以没有什么奇特的自动化;我将进行一系列更改,然后定期使用将站点推送到服务器。我喜欢跟踪哪些修订版已经上传,哪些还没有上传,现在我有一个名为
push
的分支,每次上传到服务器时,我都会将
master
合并到该分支中。(如果涉及任何其他分支,我会在推送之前将所有内容合并到
master
,这样只有
master
才会被合并到
pushed


这已经足够好了,但在我看来,使用“整个”分支似乎很奇怪,而我所关心的只是每次将一个提交标记为“这已被推送”。(是的,我知道在Git中分支被认为是非常轻量级的。)从术语上看,似乎每次上传到服务器时我都想“标记”最新的提交,但在Git中,标记应该是对一个特定提交的不可变引用。保持一个名为
push的分支是做我想做的事情最惯用的方法,还是有更好的方法?

您可以使用
git tag-f tagName


我不是git专家,但我看不出为什么不应该使用标记来实现这一点。虽然分支实际上是轻量级的,但是标记可以避免合并。

Git中的标记有两种风格:“轻量级”和“带注释的”。轻量级标记非常类似于分支头,它只是一个指向特定提交的名称,仅此而已。更改轻量级标记指向的提交id非常简单


带注释的标记有自己的sha1 id、时间戳、提交者、描述(可选)签名,还指向特定的提交。当你说“应该是一个不可变的引用”时,我想这就是你所指的那种标记。如果我理解正确,你想引用你在网站上的上一次更新,对吗?嗯,分支实际上是它们所做的,但与您所做的命名无关

您可能知道,使用版本控制系统进行开发有两种主要方式:

  • master
    是开发分支。在本例中,稳定版本是特定的标签
  • master
    是稳定的分支。在本例中,您还有其他用于开发的分支。当您想将您的功能添加到
    主控
    时,您可以将主控与您自己的分支合并并测试它。如果成功,您可以将结果与
    master
    合并,并将其推送到您的网站
实际上,您所说的是第二种方法,其中您有一个名为
的稳定分支push
,并始终保持它的稳定(上传、工作、任何您想要的属性)

因此,是的,您所做的已经存在,但是更习惯地说,它们将
master
作为稳定的分支,而不是其他分支(例如名为
push
)。这是相同的概念


编辑:我想说的是,无论何时你想上传你的更改到你的网站,合并你在
master
(或者
push
,如果你喜欢),然后上传。这样,
master
(或
push
)的最后一次提交就是网站的最后一次上传。

分支只是指向提交的指针。没别的了。你真的不可能有任何“更轻量级”的东西。你知道吗,当你推的时候,你推的是你所有的本地提交,而不仅仅是最后一个吗?@Shahbaz当然知道。我想跟踪的是最近推送的提交。(当我说“推送”时,我的意思是我只是通过FTP或其他方式上传一些文件;我实际上没有使用
git-push
来更新远程存储库。)这更有意义吗?是的,我明白了。读我的答案。这并不完全是你在评论中所说的,但或多或少告诉你你做了正确的事情。但是合并应该是一种快速的“合并”。实际上,移动标记是一个分支。移动标记的问题是,已经有标记的Git工作区不会用标记的新位置进行更新,除非先删除本地标记。如果你不小心,你会突然对标签指向的内容有不同的看法,即使是对于那些在同一时间同步的工作区,没有中间的更改,因此直觉上应该指向同一个提交。事实上,我很熟悉(来自)保持
master
作为一个稳定分支的策略,并且只在发布过程中合并到其中。无论出于何种原因,我从未想过将其应用于这个网站案例。我想我会坚持这种一般的策略(尽管看起来标签也可以很好地工作)。很好的链接!你是绝对正确的,有不止一种方法可以实现你想要的,你应该选择一种你更喜欢的方法!