【发布时间】:2013-01-24 12:41:22
【问题描述】:
考虑以下情况(例如)20GB 目录存储在具有 20.1GB 可用磁盘空间的计算机上,并且我们希望将此目录置于版本控制之下。服务器可用于存储修订历史记录。
在 subversion 中,我们从服务器签出一个空目录,添加文件并提交它。这将创建与工作目录大小大致相同的 .svn 目录,以便它可以检测更改并创建差异。当您进行定期更改时,.svn 目录的大小不会随着时间而改变。
但是,在 git (git init .; git add .; git commit) 中尝试这个需要我们在本地存储完整的历史记录。随着定期更改(假设无法很好地压缩的大型二进制文件),.git 目录会不断增长,直到它不适合磁盘。
有没有办法操作 git 使其不在本地存储完整的历史记录;以便它只保留有关您正在处理的分支尖端的数据,并在每次需要有关历史修订或其他分支的信息时查询远程服务器?
注意:我知道 .git 目录的压缩效果更好,您可以在它变得比 .svn 目录大之前进行大量修改 - 问题是它会随着时间的推移而增长,而 .svn 不会
【问题讨论】:
-
如果您的项目有 20GiB 的源代码,那么您面临的问题不是技术问题。您需要将项目分解为更小的组件。 (二进制文件不属于 VCS。)
-
Git 不是为任意文件设计的版本控制文件系统?
-
它确实是为保存任意文件而设计的。 IMO 选择存储非文本文件是一个错误。还有其他工具更适合此类文件。
-
哪些工具适用于版本控制的二进制文件?
-
我不知道有什么工具可以很好地对二进制文件进行版本控制,就像文本文件受版本控制一样。以保持一致修订的方式存储二进制文件是另一回事。对于可执行文件,任何体面的包管理系统都可以(例如 dpkg、rpm、pkg)。
标签: git