2

听我说!

我有一个本地文件夹,其中包含最新版本的所有代码。相同版本的代码存在于远程 git 存储库的主分支中。现在想在本地初始化git,但不想再通过git pull下载所有代码。即使我在 git init 之后添加了一个远程存储库并尝试获取,它似乎在确定它是同步的之前下载了所有内容。

代码中还有很多二进制文件。

这样做的主要原因是节省带宽。但也只是知道如何去做。

我如何告诉 git - “这已经与服务器中的最新版本同步(甚至更好 - 服务器上的这个特定修订版 - 相信我的话 - 并且只接受以后的修订版?)”

编辑:

老实说,服务器现在只有一个提交 - 现在我想要的是例如

在本地也执行该提交并告诉 git 服务器也具有相同的提交(因为第一次提交完成时存在的文件夹中的文件完全相同) - 显然 git 还不知道,因为生成了不同的提交 ID本地来自服务器上的内容。如果无论如何我可以在本地签入后将提交 ID更改为服务器上的内容,它将解决我的问题。

如果可能的话,我正在寻找与上述类似或类似的东西。

我真的不想做“git clone”(现在再次通过 git 下载所有文件),即使是浅克隆。

编辑2:

请注意,即使只提交一次,我的 .git 文件夹也是 182 MB。这几乎是整个 repo 的压缩大小 - 我担心这整个东西会再次被下载(即使本地已经存在相同的 182 MB .git 文件,可能只有提交 ID 不同)。

4

2 回答 2

5

您不能指望 git 仅根据您的工作副本工作!它需要大量元数据才能正常运行,包括项目历史。

你想要的是一个浅克隆。这可以与

git clone --depth=1 git://some/repo

然而,浅层克隆有很多重要的限制。

  • 你不能推开他们
  • 你无法摆脱他们
  • 如果不下载更多内容,您将无法参考项目历史
于 2013-06-22T20:17:50.290 回答
3

我认为您误解了 git 是什么以及它是如何工作的。分布式版本控制系统的全部意义在于您在本地拥有存储库的整个历史记录。

也就是说,如果你真的想这样做,你可以做一个“浅克隆”:

git clone --depth <depth> <repository>

<depth>您想要的历史修订数量在哪里。请注意,在尝试与其他存储库交互时,此克隆将被严重破坏,因此您可能无法获得所需的行为。

git clone手册页,粗体强调我的:

--depth <depth> 创建一个克隆,其历史被截断为指定的修订数。浅层存储库有许多限制(您不能克隆或从中获取,也不能从中推送或进入),但如果您只对历史悠久的大型项目的近期历史感兴趣,并且想要作为补丁发送修复。

那里的最后一个短语表示您唯一剩下的工作流程 - 生成补丁,然后如果您想推送,则将它们应用到其他地方的完整存储库。

于 2013-06-22T20:15:04.580 回答