为什么每次推送到origin master时Git都会发送整个仓库?

3

我在本地提交了几个更改,然后使用“git push origin master”推送到github。它总是推送完整的代码库(根据传输的数据量判断)。

我肯定错过了一些简单的东西...应该只推送更改的文件吗?

4个回答

2

1
如果你只看Git发送到远程的“对象”数量,那可能会给你带来误导。Git不仅为每个提交中的文件创建对象,还为每个目录(树)、每个提交和每个标签创建对象。如果你进行合并等操作,可能会有比预期更多的提交。
你的代码库有多大?你用什么数字来判断数据量的大小?

1

Git能版本化整个文件树,每个提交指向一个完整的树快照。Git依靠压缩来保持存储库的大小。因此,当你推送数据时,需要传输的是这些快照,而不是差异。实际上,Git会询问服务器它的最新提交是什么,然后发送在该分支上构建的所有本地提交。这些对象在传输时可能已经被压缩,但它们仍然是快照。

这至少是我的理解。


0
这可能是一个简单的答案,但我认为我一直犯的错误是在提交更改之前执行“git add .”。
如果我执行“git add 文件名”,然后在执行“git push origin master”时进行提交,那么只有这个文件会被传输到GitHub。

3
如果一个文件已经在仓库中且没有更改,使用 git add 是无害的——Git会识别这一点并不实际执行任何操作。但是,如果您有任何其他文件(例如编译的 .obj 文件)被添加到 git add . 中,那么这可能会解释您所看到的行为。建议经常使用 git status ,以确保您对已更改内容的理解与 Git 的理解相匹配。 - Greg Hewgill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接