首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在“`git签出”失败后恢复“`git lfs后检查”钩子

如何在“`git签出”失败后恢复“`git lfs后检查”钩子
EN

Stack Overflow用户
提问于 2021-07-27 23:31:33
回答 1查看 760关注 0票数 0

我正在一个巨大的git单回购系统中工作,其大小约为100 GB。我们在.git/hooks/post-checkout中有一个git后置签出钩子,其中包含在每次签出后运行git lfs的以下钩子:

代码语言:javascript
运行
复制
#!/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后签出钩子操作的错误:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-07-28 05:50:24

我的一个想法是注释掉.git/hooks/post-checkout dir中的最后一行,使其看起来如下:

代码语言:javascript
运行
复制
# git lfs post-checkout "$@"

然后,保存文件并运行git checkout main。完成后,运行git lfs pull,然后取消注释上面的行以将该文件返回正常。这样,由于仅git checkout就需要大约10分钟的时间,并且至少要签出80000个文件,所以在git lfs部件运行和永久运行(3+小时)之前,该部分将完成并传递,并且可能会崩溃。

我不确定这是否有效,但无论如何,我对我的问题没有一个确切的解决方案,下面是我所做的:

由于磁盘空间不足,

  1. git checkout main失败。git status现在显示了数千个文件,这些文件被更改和未分阶段运行。因此,运行以下命令以清除您的git status以准备再次运行git checkout:git状态#查看有数千次未分阶段的更改git重置--硬#重置文件返回到它们在main git中的位置--清除-fd #删除所有未执行阶段的文件和目录git状态#这现在应该是干净的

如果使用bazel构建系统: -h #检查当前磁盘使用情况rm ~/. cache /bazel #删除Bazel构建缓存df -h #确保现在有更多空闲的,则可以通过删除Bazel缓存来减少在磁盘上的使用率。

  1. 缩小.git文件夹的大小以释放磁盘空间。请看我在这里的完整答案:How to shrink the .git folder。时间git lfs剪枝时间git gc时间git剪枝时间git -a -d -深度=250-a

  1. 现在再次尝试结帐,只让它在3+小时内重新下载整个30 GB左右的数据。:(哦,well...at,因为我刚刚释放了磁盘空间,减少了.git dir的大小;2)删除了Bazel构建缓存: time签出主

好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68552775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档