代码之家  ›  专栏  ›  技术社区  ›  Senseful

如何判断文件是否将正确上载到Git LFS?

  •  0
  • Senseful  · 技术社区  · 5 年前

    我想把所有东西都加进去 MyProject/Frameworks/ git-lfs (大文件存储)。我是 not sure 在目录下递归匹配所有文件和文件夹的正确格式是什么? Frameworks 文件夹是。 This answer 说正确的格式是 git lfs track "MyProject/Frameworks/**" 但是 Atlassian's help document 说我应该用 git lfs track "MyProject/Frameworks/" . 我两个都试过了,但他们没用 git lfs 用于存储。它尝试直接上传文件。

    当然,我很想知道正确的格式,但更重要的是,在我尝试将更改推送到GitHub之前,我想验证匹配和文件确实工作正常。这将允许我迭代并尝试新事物。

    我看到两个相关的命令,可能会有所帮助: git lfs status git lfs ls-files . 目前还不清楚我应该使用哪一个,以及应该寻找什么样的输出。例如,当我跑步时 GIT-LFS状态 它给我看了很多档案 Git LFS objects to be committed ,使我认为他们将被添加到Git LFS。但是,在尝试推到github.com之后,我意识到情况显然不是这样的。如果有帮助,这些文件的输出总是 (Git: edee1ad) 在每个文件名之后。

    当我试图使用 Git LFS LS文件 我不确定是否需要在 git add 在提交文件之后,或者在推送文件之后。大多数时候它只是显示空白输出。

    本质上,问题是: 如果我配置 GIT-LFS 正确,什么工具(例如 GIT-LFS状态 )我应该使用吗?我应该寻找什么样的输出? 之前 我试图承诺/推动?

    注: 请不要回答这个问题 只有 如何匹配所有递归文件,因为这将有助于我一次(这个特定的情况),而不是允许我迭代和尝试新的东西(任何情况)。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Senseful    5 年前

    DR

    如果一切设置正确,您可以通过以下方式验证Git LFS是否可以正常工作:

    1. git add 有问题的文件。
    2. 执行以下操作之一:
      • git lfs status 并确保相关文件出现在 Git LFS objects to be committed 他们有 LFS 括号中的值;或
      • git lfs ls-files 并确保有问题的文件出现在此输出中。

    阿伊·奥伊尔 重要: 运行后 git lfs track 你必须跑 Git添加 在调用之前刷新文件状态 GIT-LFS状态 Git LFS LS文件 . 否则,您将看到这些命令的无关输出。

    而且,据记录,看起来 git lfs track "MyProject/Frameworks/**" 是进行递归匹配的正确方法。


    设置和测试方法:

    1. git lfs track "*.lfs" . 这就产生了 .gitattributes . 保持原样。
    2. 在根目录中创建文件, Test.lfs . 保持原样。
    3. 测试:

      • GIT-LFS状态 :无文件名输出

        $ git lfs status
        On branch master
        Git LFS objects to be pushed to origin/master:
        
        
        Git LFS objects to be committed:
        
        
        Git LFS objects not staged for commit:
        
        
        $
        
      • Git LFS LS文件 没有输出

        $ git lfs ls-files
        $
        
    4. 添加 git add Test.lfs .

    5. 测试:

      • GIT-LFS状态 : LFS 现在将以 LFS 后缀。

        $ git lfs status
        On branch master
        Git LFS objects to be pushed to origin/master:
        
        
        Git LFS objects to be committed:
        
                Test.lfs (LFS: 2ab9f1e)
        
        Git LFS objects not staged for commit:
        
        
        $
        
      • Git LFS LS文件 : LFS 现在将列出。

        $ git lfs ls-files
        2ab9f1e447 * Test.lfs
        $
        
    6. 提交更改。

    7. 测试:

      • GIT-LFS状态 : LFS 将移动到“待推”部分。它会有一个后缀,比如一堆数字/字母。

        $ git lfs status
        On branch master
        Git LFS objects to be pushed to origin/master:
        
                Test.lfs (2ab9f1e44720efb7a26553e06b667a270320efb3e906553b3f9e0702538a2b3f)
        
        Git LFS objects to be committed:
        
        
        Git LFS objects not staged for commit:
        
        
        $
        
      • Git LFS LS文件 : LFS 将继续列出。

        $git lfs ls文件
        2AB9F1E447*测试.lfs
        $
        
    8. 推动变化。包括添加/提交/推送.gitattributes。
    9. 测试:

      • GIT-LFS状态 :不再输出文件名

        $Git LFS状态
        在分支主机上
        要推送到源站/主站的Git LFS对象:
        
        
        要提交的Git LFS对象:
        
        
        Git LFS对象未准备提交:
        
        
        $
        
      • Git LFS LS文件 :继续输出跟踪文件

        $git lfs ls文件
        2AB9F1E447*测试.lfs
        $
        

    结论:

    • 这个 Git LFS objects not staged for commit 节似乎有误导性,因为它从未显示任何文件,甚至那些应该由LFS跟踪的文件。
    • 如果尝试使用非Git LFS跟踪文件进行上一个实验,还将注意到它出现在 要提交的Git LFS对象 不正确。它不是Git LFS对象。但是,你可以通过观察它是如何结束的来判断它实际上不是一个git-lfs对象。如果它结束 (Git: 111111111) 它不会被提交给LFS。
    • 为了避免上述困惑,您可能希望 Git LFS LS文件 结束 GIT-LFS状态 以确定某些内容是否将成为Git LFS的一部分。
    • 另一种方法是:Xcode等一些应用程序将 Git添加 文件以一种奇怪的方式,导致原本应该是明确的匹配,不考虑为git-lfs。解决方案是先拆下文件,然后重新放置它们。