我正在尝试将 Perforce(p4) 存储库转换为 git(最好是 Helix4Git,由 perforce 实现的 git 服务器)。
我将我的问题简化为一个简单的用例,以便找到更大问题的解决方案。
在P4我有一个文件//仓库/foo.txt大小为 10MB。我使用 P4 的合并命令“克隆”了它,因此我的存储库中有两个相同的文件,名为//仓库/bar.txt。
//depot
.. foo.txt (10MB) [internal-id==> 4509b9a8.txt]
.. bar.txt (10MB, clone of foo.txt) [internal-id==> 4509b9a8.txt]
P4服务器存储文件一次通过在内部使用两个链接来减少使用的磁盘空间,因此只使用了 10MB。在本地磁盘上,我会有两个物理副本(10+10=20MB)。现在问题是:
我用git-p4将我的 P4 存储库转换为 git。首先,我将其克隆到本地计算机,然后设置 git-remote 并提交所有内容,最终将其放在我的 git 服务器上。
如前所述,我的本地磁盘上有 20MB,当我将其提交到我的 git 服务器时,他也使用了 20MB。
1)如果我在 git 中克隆一个文件,那么它在服务器上是否也会被物理克隆?
2) git-p4 或 git 服务器是否有可能检测到这个“克隆” - 它是同一个文件 - 并且也在内部使用链接? git 服务器本身或使用文件系统功能(软链接或硬链接等)。
额外问题)macOS APFS 对于 git 服务器来说会有帮助吗?
多谢!
答案1
当你将克隆的文件移入 Git 时,它们将被存储分别地。Git 只存储文件内容和文件权限。不跟踪元数据和 inode ID。
最好的选择是将克隆添加到gitignore
或.git/info/exclude
参考:在此处输入链接描述