GIT标记无法按预期工作

时间:2013-04-23 23:57:22

标签: git

我对我在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客户端。

感谢

1 个答案:

答案 0 :(得分:2)

假设

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

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

    MyTag 2.0.0仍然包含 Project 2 ..... Project 2MyTag 1.0.0以来一直没有变化。如果您结帐MyTag 2.0.0,那么您将获得整个仓库的快照。

    背景

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

    MyTag 2.0.0指向包含C2中的更改集的提交(让我们说Project 1)。我假设Project 2中的文件没有被更改和提交,因此标签不会将直接与Project 2的文件相关联。 MyTag 1.0.0也指向提交(让我们说C1)。

    由于MyTag 2.0.0指向C2指向C1,所有这些更改都由MyTag 2.0.0有效指出,并在签出时包含在内。< / p>

    MyTag 1.0.0可能指向 Project 1/Project 2目录中的文件更改提交。

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

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

    请记住,我没有使用TortoiseGit,因此我无法准确看到您所看到的内容。然而,我上面已经解释过git标签如何指向提交的概念解释了为什么任何 git客户端会为你所描述的内容显示类似的结果。我在测试仓库中执行了您描述的提交和标记,并在SourceTree中获得了类似(正确)的结果。