(OSError: You seem to have cloned a repository without having git-lfs installed.)git-lfs安装使用全过程

问题描述:

这周mentor给我传了个git仓,我用zip的方法加载在本地上使用,运行程序时报错。
报错的意思是克隆的仓库使用了 Git Large File Storage (git-lfs) 来管理大文件,而你的本地环境没有安装或启用 git-lfs。

  File "D:\anaconda\envs\patient\lib\site-packages\transformers\modeling_utils.py", line 584, in load_state_dict
    raise OSError(
OSError: You seem to have cloned a repository without having git-lfs installed. Please install git-lfs and run git lfs install followed by git lfs pull in the folder you cloned.

原因分析:

git–lfs是什么:

git-lfs 是专门为 Git 管理大文件的扩展。Git 默认不适合存储非常大的文件(例如模型权重、图片或视频),因为这些文件会大幅增加仓库的大小,并且每次拉取或推送时都会导致性能问题。git-lfs 通过将大文件存储在LFS服务器上,而只在 Git 历史中保留指向这些大文件的指针.这样可以减少仓库的大小,并提高 Git操作(如克隆、拉取和推送)的速度。


解决方案:

安装 git-lfs,安装命令如下:

  • 对于 Linux:
sudo apt-get install git-lfs    # Ubuntu/Debian
sudo dnf install git-lfs        # Fedora
sudo yum install git-lfs        # CentOS/RHEL
  • 对于 macOS:
brew install git-lfs

对于 Windows,可以使用 Git for Windows 自带的 git-lfs,或者手动下载并安装(https://git-lfs.com/)
再或者,使用 choco(如果你有 Chocolatey 包管理器):

choco install git-lfs

初始化 git-lfs:

git lfs install

确认项目是否为 Git 仓库,如果你通过其他方式下载了代码(比如直接下载 ZIP 文件),那么它不会自动成为一个 Git 仓库。检查代码如下:

git status

如果出现类似 fatal: not a git repository 的错误,说明该目录不是 Git 仓库。

如果你最初不是通过 git clone 获取项目,那么需要重新克隆项目来使其成为 Git 仓库。你可以通过以下命令重新克隆项目(假设你有项目的 GitHub URL):

git clone <repository_url>

这个时候Git 正在询问你如何进行身份验证。你有两种选择:

Cloning into 'LLM_API'...
Select an authentication method for 'https://github.com/':
  1. Web browser (default)
  2. Personal access token
option (enter for default):

第一种是Web 浏览器验证,这种方式会打开你的默认浏览器,浏览器会自动打开 GitHub 登录页面,登录你的 GitHub 账户。
你可能会被要求进行双因素验证(如果启用了),验证后授权访问。
完成后,克隆操作会自动继续。

第二种个人访问令牌 (Personal Access Token),这种方式是通过生成一个 GitHub 个人访问令牌(PAT)来进行身份验证:

  1. 登录 GitHub 账户,进入个人访问令牌生成页面(https://github.com/settings/tokens),点击 Generate new token,选择所需权限(比如 repo,workflow等),然后生成。
  2. 复制生成的令牌(这只会显示一次),
    在这里插入图片描述

然后输入你的个人访问令牌作为密码来克隆仓库:

option (enter for default): 2
Username: <your_github_username>
Password: <your_personal_access_token>

这种方式适合你以后频繁进行 GitHub 操作时使用,尤其是在不想每次都通过浏览器登录时。
成功后进入项目目录:

cd abcd/efgh

运行以下命令拉取 LFS 文件:

git lfs pull

如果你已经下载了文件并不想重新克隆,你可以将该目录初始化为 Git 仓库并关联到远程仓库。步骤如下:

cd abcd/efgh
git init
git remote add origin <repository_url>
git fetch origin
git checkout -t origin/main
git lfs pull

这将初始化 Git 仓库,添加远程仓库,拉取远程内容,并执行 git lfs pull 以下载 LFS 文件。
同样,在git fetch origin时会让你选择1或2的授权方式。


常见问题:

有时候在输入git checkout -t origin/main会报错提示origin/main不是一个提交点。

fatal: 'origin/main' is not a commit and a branch 'main' cannot be created from it

这可能是由于远程仓库的默认分支名称不是 main。许多项目仍然使用 master 作为默认分支名称。因此,你需要检查远程仓库的分支名称并确保正确。首先,确认当前 Git 仓库的分支是否存在,并确保你在正确的分支上。运行以下命令查看当前分支:

git status

如果没有分支或者 HEAD 处于 “detached” 状态,说明当前没有检出任何有效的分支。接着可以尝试检出仓库的默认分支。如果你之前已经查看过远程分支名称,可以检出对应的分支(可能是 master 或 main)。使用以下命令:

git checkout master
git checkout main

如果默认分支是其他名称,可以使用 git branch -r 检查可用的远程分支名称,然后检出对应的分支:

git branch -r
git checkout <branch-name>

这将列出所有远程分支。如果远程分支是 origin/master ,你就可以使用以下命令切换到该分支:

git checkout -t origin/master

如果之后git lfs pull仍然失败,你可以使用以下命令查看详细的日志以诊断问题:

git lfs logs last

我当时出现的问题be like:
在这里插入图片描述
这意味着 Git 目前无法找到 HEAD 引用,通常是因为当前仓库没有正确的分支或没有成功检出分支。如果仓库分支还没有同步远程仓库的数据,可能也会导致 HEAD 无法解析。你可以尝试通过以下命令来同步远程仓库:

git fetch origin
git checkout <branch-name>  # 使用正确的分支名

或者重新克隆项目,并确保在克隆时启用 Git LFS(这个命令将递归克隆项目,包括 Git LFS 管理的文件):

git clone https://github.com/1234142/1231231 --recursive

另一种问题会在git status的时候发现:

E:\LLM_API>git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitattributes
        .idea/
        LLM_API/
        README.md
        __pycache__/
        askQuestion from php_single session
        build_RAG_table.py
        build_chromadb.py
        certbot/
        config.py
        data/
        nginx/
        outputs/
        queue/
        redis/
        send request from cmd
        simulate.py
        start_api_via_py_new.py
        start_fastapi_2.py
        try.py
        try_multiple_api.py
        try_muti.py
        utils/

nothing added to commit but untracked files present (use "git add" to track)

根据 git status 的输出,你当前在 master 分支上,但尚未有任何提交,所有文件都是未追踪的。这意味着你可能已经下载了项目的文件,但它们还没有被 Git 追踪或版本控制。首先检查是否已正确添加远程仓库。运行以下命令查看远程仓库:

git remote -v

如果没有显示任何远程仓库,需要添加远程仓库:

git remote add origin https://github.com/123123/123123.git

远程仓库应该有现有的提交记录,因此你需要从远程仓库拉取最新的提交。尝试运行以下命令来拉取远程提交:

git fetch origin
git reset --hard origin/master

这将把本地的 master 分支与远程的 master 分支同步,并将你的本地文件状态重置为远程的版本。如果远程的默认分支是 main 而不是 master,可以相应地修改命令为 origin/main。这样拉取 Git LFS 文件就会成功:
在这里插入图片描述
另外,如果你有本地的未追踪文件,并希望将它们保存到仓库中,可以将它们添加到版本控制并进行提交:

git add .
git commit -m "Initial commit with local changes"
git push origin master
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值