我正在一个巨大的git
单回购系统中工作,其大小约为100 GB。我们在.git/hooks/post-checkout
中有一个git后置签出钩子,其中包含在每次签出后运行git lfs
的以下钩子:
#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/post-checkout.\n"; exit 2; }
git lfs post-checkout "$@"
我刚刚运行了git checkout main
,在运行了3个小时之后,通过我的互联网连接下载了27 GB的数据,它失败了,因为我的磁盘已经满了,大约97%是通过git lfs
后结帐挂钩操作完成的。
所以我清理了一些磁盘空间。
现在,git checkout main
失败时出现了错误:
错误:签出将覆盖对下列文件的本地更改:
因此,我尝试手动运行git lfs post-checkout main
(我甚至不知道这是否是一个合理的命令--我猜在这里),它也失败了,因为:
应该在Git的后提交钩子中运行。运行
git lfs update
来安装它。
有任何方法可以恢复我的git lfs
git reset --hard && git clean -fd && git checkout main
**)?**操作,所以我不需要清除所有刚刚下载的27 GB数据,开始从头开始下载(通过git reset --hard && git clean -fd && git checkout main
**)?**)。
注意,git checkout main
显示了一些类似于git lfs
后签出钩子操作的错误:
error: Your local changes to the following files would be overwritten by checkout:
[list of tons of files]
error: The following untracked working tree files would be overwritten by checkout:
[list of tons of files]
Aborting
0
发布于 2021-07-28 05:50:24
我的一个想法是注释掉.git/hooks/post-checkout
dir中的最后一行,使其看起来如下:
# git lfs post-checkout "$@"
然后,保存文件并运行git checkout main
。完成后,运行git lfs pull
,然后取消注释上面的行以将该文件返回正常。这样,由于仅git checkout
就需要大约10分钟的时间,并且至少要签出80000个文件,所以在git lfs
部件运行和永久运行(3+小时)之前,该部分将完成并传递,并且可能会崩溃。
我不确定这是否有效,但无论如何,我对我的问题没有一个确切的解决方案,下面是我所做的:
由于磁盘空间不足,
git checkout main
失败。git status
现在显示了数千个文件,这些文件被更改和未分阶段运行。因此,运行以下命令以清除您的git status
以准备再次运行git checkout
:git状态#查看有数千次未分阶段的更改git重置--硬#重置文件返回到它们在main
git中的位置--清除-fd #删除所有未执行阶段的文件和目录git状态#这现在应该是干净的。
如果使用bazel构建系统: -h #检查当前磁盘使用情况rm ~/. cache /bazel #删除Bazel构建缓存df -h #确保现在有更多空闲的,则可以通过删除Bazel缓存来减少在磁盘上的使用率。
.git
文件夹的大小以释放磁盘空间。请看我在这里的完整答案:How to shrink the .git folder。时间git lfs剪枝时间git gc时间git剪枝时间git -a -d -深度=250-a.git
dir的大小;2)删除了Bazel构建缓存: time签出主。
好了。
https://stackoverflow.com/questions/68552775
复制相似问题