单个克隆的 git 存储库占用多少内存?[已结束]

How much memory does a single, cloned git repo occupy? [closed]

提问人:user10709800 提问时间:9/8/2023 更新时间:9/11/2023 访问量:65

问:


想改进这个问题吗?通过编辑这篇文章来更新问题,使其仅关注一个问题。

2个月前关闭。

在纯粹在我的远程服务器上使用 git 进行版本控制之后,我现在希望使用 git 在我的远程和本地文件系统中进行版本控制。

到目前为止,我这样做的方法是:

  1. 创建一个远程裸存储库作为“保存”目录:
  • 创建目录mkdir /save
  • 为此项目创建保存存储库Create a save repo for this projectmkdir /save/projectName
  • 输入项目存储库并将其初始化为裸存储库cd /save/projectNamegit init --bare
  1. 在本地克隆远程保存存储库,添加、编辑和提交,然后推送回远程保存:
  • 创建本地开发目录并输入mkdir /webDevcd /webDev
  • 克隆此项目的远程保存 'git clone user@host:/save/projectName
  • 添加文件,然后运行,编辑它们,然后提交 'git commit * -m “Update”。git add *
  • 将更改推送到远程保存存储库git push origin master
  1. 将更新的保存存储库克隆到远程计算机上的开发存储库中:
  • 进入服务器目录 和 development 子目录/srv/srv/dev
  • 克隆远程保存的存储库git clone /save/projectName
  1. 检查开发站点是否按预期工作,然后对生产目录重复 (3):
  • 在生产目录中运行git clone /save/projectName/srv

这一切都很好,但我担心的是拥有 3 个具有相同内容的目录所占用的内存,最重要的是,对于多个项目,项目编号 N 将增加为 3*N。

我已经阅读了许多关于使用 git 的在线教程和网站,但是我无法清楚地遵循任何内容。经常有人谈论使用分支,但我还不想考虑分支 - 只是克隆、推和拉。

我认为理想情况下,我希望在我的本地机器上拥有具有动态 IP 的裸存储库,然后以某种方式将内容复制到远程机器开发和生产目录。这会将每个项目的 3 个目录减少到 2 个,这会更好,但我还没有找到一种方便地从动态 IP 地址获取的方法。/savegit clone

总而言之,我能想到的几个问题可以解决我遇到的问题:

  1. 克隆的 git 存储库是否占用与其原始文件等价物相同的内存空间?还是 git 以某种方式使内存大小更简洁?

  2. 有没有一种行业标准的方法来设置本地、远程开发和远程生产位置的流程,以解决内存问题?

  3. 有没有办法在我的本地机器上托管裸 git 存储库,然后以某种方式将它们移动到远程开发和生产位置?

如有上述问题的任何指示,或我可能有的误解,以及解释,将不胜感激。

git 内存管理 远程服务器 生产环境 静态 IP 地址

评论

1赞 matt 9/9/2023
“克隆的 git 存储库是否占用与其原始文件等价物相同的内存空间?还是 git 以某种方式使内存大小更简洁?Git 存储库占用的空间比它们所代表的文件层次结构更多,部分原因是每个文件的每个提交状态都会占用空间,部分原因是 Git 存储库比文件内容更多。——但实际上,如果你担心这一点,你就做错了什么。Git 存储库通常不大(许多公共托管站点将拒绝大型存储库或包含大型 blob 的存储库)。
0赞 matt 9/9/2023
“有没有一种行业标准的方法来设置本地、远程开发和远程生产位置的流程,从而解决内存问题?”本地和远程是两个不同的地方,因此没有什么可以标准化的。Dev 与 prod 通常是分支的区别。
0赞 matt 9/9/2023
“有没有办法在我的本地机器上托管裸 git 存储库,然后以某种方式将它们移动到远程开发和生产位置” 当然,如果这是您想做的。

答:

1赞 VonC 9/11/2023 #1

我知道没有“内存”问题。只有磁盘空间问题。

通常的工作流是远程的 默认情况下,工作树不会被推送修改。

最佳做法是远程裸存储库,带有一个接收后子,可以配置为执行您需要的任何命令。

就像转到您的实际存储库(开发存储库或生产存储库,具体取决于远程存储库)并执行(从本地开发环境推送到裸存储库的提交更新工作树)。git pull

如果你的开发/生产存储库位于同一个远程服务器上(你的裸存储库在哪里,以及你要推送到的位置),那么你可以使用 git 工作树(我在这里介绍),来保留一个实际的存储库和两个签出的工作树。