是否将git标签推送到原始副本文件?

时间:2014-08-11 13:34:22

标签: git tags

按照说明here我创建了一个本地带注释的标签,然后通过

将其推送到远程服务器
git push origin [tagname]

我很惊讶在输出中看到大文件大小:

$ git push origin v1.5
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 204.56 MiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag]         v1.5 -> v1.5

我是否只是在存储库中创建了所有内容的副本?也就是说,我创建的每个标签在服务器上都需要大约204 MB吗?

2 个答案:

答案 0 :(得分:1)

标记只是指向特定提交的文件。什么是204MB是存储库中的文件。您的推送大小取决于自上次推送以来更改的文件大小。

因此,通过推送,您创建了存储库中之前不在远程存储库中的所有内容的完整副本。通过创建标记,您创建了一个文件,其中包含指向一个提交和一些元数据的指针(即一个非常小的文件)。

如果你对git中这个internaly如何工作的更多细节感兴趣:文件存储是文档的Chapter 9.2(你的200 + MB),它们的引用方式是Chapter 9.3(会发生什么)当你创建一个标签时)

答案 1 :(得分:0)

不,您没有创建整个存储库的副本。

正如@Trudbert所说:

  

标记只是指向特定提交的文件,其余的存储库是204MB。因此,您的推送大小取决于自上次推送以来更改的大小。

标记只是提交的指针。如果提交已经在服务器中,那么它应该只有几千字节。如果没有,那么也需要推送提交,这就是根据提交的大小,推送文件大小的原因。