这取决于您的工作流程和您可以使用的设施。
Git 将文件的版本存储为 blob。这些 blob 被 diff 压缩,因此只存储差异。因此,文件大小只会略微增加。
如果版本控制文件是二进制文件或单个更改重组整个文件的文件,情况就不同了。在这种情况下,Git 会存储每个文件的副本,从而使存储库快速增长。
Git 和 Git-LFS blob 大小的比较
Git 在 diff 压缩甚至大文件方面做得很好。我发现大文件的压缩效果非常好(大小完全变化):
| type |
change |
file |
as git blob |
after git gc |
as git-lfs blob |
| Vectorworks (.vwx) |
added geometry |
28,8 MB |
+26,5 MB |
+1,8 MB |
+26,5 MB |
| GeoPackage (.gpkg) |
added geometry |
16,9 MB |
+3,7 MB |
+3,5 MB |
+16,9 MB |
| Affinity Photo (.afphoto) |
toggled layers |
85,8 MB |
+85,6 MB |
+0,8 MB |
+85,6 MB |
| FormZ (.fmz) |
added geometry |
66,3 MB |
+66,3 MB |
+66,3 MB |
+66,3 MB |
| Photoshop (.psd) |
toggled layers |
25,8 MB |
+15,8 MB |
+15,4 MB |
+25,8 MB |
| Movie (mp4) |
trimmed |
13,1 MB |
+13,2 MB |
+0 MB |
+13,1 MB |
| delete a file |
|
-13,1 MB |
+0 MB |
+0 MB |
+0 MB |
如果你没有要推送到的遥控器,最好不要使用 Git-LFS,因为 Git-LFS 版本化文件似乎根本没有添加额外的压缩(见上文) .
这里学到的一个重要教训是,Git 的差异压缩方法不适用于 .fmz 等真正的二进制文件。这些将是 Git-LFS 版本控制的最佳候选者。
对于其他看似非文本但其结构类似于文本(.vwx 或 .afphoto)的文件类型,diff 方法表现良好。在单个用户场景中,总体存储库大小而不是提交速度很重要,我不会将这些放在 Git-LFS 版本控制下,因为 Git blob 大小明显小于 LFS blob,从而节省了本地和远程空间.
Git-LFS 的好处
Git-LFS 通过将旧版本的大型二进制文件存储在存储库之外(远程)的位置并用指针文件替换它来解决这个问题。如果需要旧版本,则客户端从远程拉取它。因此,如果设计者从远程拉取最新状态,他只会下载最新状态和指针文件。
因此,只有当您有权访问位于启用 LFS 的服务器上的远程时,才能促进 Git-LFS。如果没有服务器将 blob 推送到,则 LFS 跟踪的 blob 将保留在本地 repo 中,因此没有利用减少本地存储消耗的优势。
通常,远程是启用 LFS 的 git 提供程序,这对于某些项目来说可能过于昂贵。但是,也有一些解决方案可以在本地托管 Git-LFS 远程。
如何在本地仓库中集成 Git-LFS
从本质上讲,Git-LFS 只允许通过 HTTPs 传输数据。因此,您需要一个单独的 Git-LFS 服务器来存储大文件。但是,本地托管没有“官方服务器”implementation。但是有一些unofficial 方法,比如Git-LFS Folderstore 可以做到这一点。
Git-LFS Folderstore 提供了一种在本地管理 Git-LFS 远程的方法。它适用于本地机器和网络驱动器。如果您使用的是 Mac OS X,则可以通过将 lfs-folderstore 可执行文件 lfs-folderstore 复制到 /usr/local/bin 来进行设置,然后:
# Creating a remote repository on a volume (attached drive or NAS)
cd path/to/remote
mkdir origin
# create a bare git repository in origin
cd origin
git init origin --bare
# Add remote to local repository
cd path/to/local/repository
git remote add origin <path/to/remote/origin>
# Enable Git-LFS in local repository
git lfs install
# Track filetype psd
git lfs track "*.psd"
# Configure lfs of the local repository
git config --add lfs.customtransfer.lfs-folder.path lfs-folderstore
git config --add lfs.standalonetransferagent lfs-folder
git config --add lfs.customtransfer.lfs-folder.args "Volumes/path/to/remote/origin"
# Commit changes
git commit -am "commit message"
# Push media to remote
`git push origin master`
如果您的远程路径包含空格,请使用"'。
如何清理本地仓库
您可以通过调用 Git 垃圾收集器 git gc 来压缩 git 存储库的大小。它不会触及 Git-LFS 的 blob。
Git-LFS 只会从本地存储库 .git/lfs/objects/ 中删除 blob,前提是它们已被推送到远程并且包含 blob 的提交比最近(3 天)旧。如果您想手动操作,请使用以下命令:
# remove lfs duplicates
# https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-dedup.1.ronn
git lfs dedup
# clean old local lfs files (>3 days of commit)
# https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-prune.1.ronn
git lfs prune