按照说明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吗?
答案 0 :(得分:1)
标记只是指向特定提交的文件。什么是204MB是存储库中的文件。您的推送大小取决于自上次推送以来更改的文件大小。
因此,通过推送,您创建了存储库中之前不在远程存储库中的所有内容的完整副本。通过创建标记,您创建了一个文件,其中包含指向一个提交和一些元数据的指针(即一个非常小的文件)。
如果你对git中这个internaly如何工作的更多细节感兴趣:文件存储是文档的Chapter 9.2(你的200 + MB),它们的引用方式是Chapter 9.3(会发生什么)当你创建一个标签时)
答案 1 :(得分:0)
不,您没有创建整个存储库的副本。
正如@Trudbert所说:
标记只是指向特定提交的文件,其余的存储库是204MB。因此,您的推送大小取决于自上次推送以来更改的大小。
标记只是提交的指针。如果提交已经在服务器中,那么它应该只有几千字节。如果没有,那么也需要推送提交,这就是根据提交的大小,推送文件大小的原因。