1

我有一个关于我在 GIT 中完成的操作的问题。我有一个存储库,其中有两个 java 项目,当前位于某个标记处。

Project 1 - MyTag 1.0.0
Project 2 - MyTag 1.0.0

到目前为止,一切都很好。

昨天我在头部签入了一些代码并再次标记了代码。项目 1 有一些变化,但项目 2 没有。

签入更改后,我在 MyTag 2.0.0 再次标记了存储库。这是我期待看到的……

Project 1 - MyTag 2.0.0
Project 2 - MyTag 2.0.0

但相反,我得到了...

Project 1 - MyTag 2.0.0
Project 2 - MyTag 1.0.0

谁能告诉我为什么 Project 2 没有获得新的 TAG?

我使用 TortoiseGit 作为我的 Windows GIT 客户端。

谢谢

4

1 回答 1

2

假设

  1. 您的 git repo 的根目录中有两个目录Project 1, 和Project 2. (顺便说一句,我建议将它们分成不同的存储库。)
  2. 您期望 git Tag 会以某种方式跟踪特定提交中所有文件的状态。

回答

项目 2 包含在标签中。您看到的是 git 报告最后一次提交是.Project 2MyTag 1.0.0

MyTag 2.0.0仍然包括 Project 2.....Project 2只是从那时起就没有改变MyTag 1.0.0。如果您结帐MyTag 2.0.0,您会在那时获得整个回购的快照。

背景

标签是指向提交的指针。它们指向
a)直接(轻量级标签)或
b)通过标签对象,然后指向提交(带注释的标签)。

MyTag 2.0.0指向C2包含更改集的提交(可以说)Project 1。我假设没有文件被更改和提交,因此标签与项目 2 的文件Project 2没有直接关系。MyTag 1.0.0也指向一个提交(让我们说C1)。

由于MyTag 2.0.0指向C2which 指向C1,所有这些更改都由 有效地指向MyTag 2.0.0,并且在签出时将被包含在内。

MyTag 1.0.0大概指向对 Project 1/Project 2目录中的文件的更改的提交。

从视觉上看,提交看起来像这样:

* C3 ---> C2 ---> C1 ---> init
         /        /
        /        /
  MyTag 2.0.0   /
               /
          MyTag 1.0.0

请记住,我没有使用 TortoiseGit,所以我无法准确地看到您所看到的。但是,我在上面解释的 git 标签如何指向提交的概念解释了为什么任何git 客户端都会显示与您所描述的内容相似的结果。我在测试存储库中执行了您描述的提交和标记,并且在 SourceTree 中得到了类似(正确)的结果。

于 2013-04-24T05:07:13.027 回答