如何使用GIT LFS跟踪iOS框架?

41

我想以智能的方式使用lfs跟踪我的框架。这是我为git lfs设置的内容:

*.framework/Versions/A (.gitattributes)
*/*.framework/Versions/A (.gitattributes)
*/{*.framework}/Versions/A (.gitattributes)

但它不起作用。当我运行时

"git add ."

没有通过LFS跟踪的文件。

如何解决这个问题。谢谢!


你尝试过使用 git lfs track "*.framework" 或者 git lfs track 'path/to/frameworks/**/*' 吗? - JAL
你尝试过使用 "git add *" 吗? - Venkat Naidu
@OrrMatarasso,我的建议有帮到你吗? - JAL
@JAL,我改变了解决问题的方法,所以没有机会尝试你的解决方案。无论如何,非常感谢你的帮助。希望有人能从你的解决方案中受益。 - vietstone
相关的 Github 问题:https://github.com/git-lfs/git-lfs/issues/3678 - DanSkeel
2个回答

45

重要提示:为了成功地使Git LFS工作,文件在您的Git历史记录中可能不存在。

必要步骤:

  1. 通过brew(或mac ports..)安装Git LFS

    brew install git-lfs

  2. 在本地的Git repo中初始化LFS。否则您的命令将没有效果。

    git lfs install

// 以前的推送钩子已更新。 Git LFS已初始化。

  1. 不要直接跟踪iOS框架(例如“opencv2.framework”),因为macOS将其视为文件夹。只需跟踪框架内部的一个大型二进制文件。

    git lfs track MyProject/Libraries/opencv2.framework/Versions/A/opencv2

// 跟踪MyProject/Libraries/opencv2.framework/Versions/A/opencv2

  1. 添加所有文件,包括新生成的“.gitattributes”

    git add .

  2. 提交更改

    git commit -m“添加了LFS二进制文件”

  3. 现在验证该文件是否被LFS正确跟踪

    git lfs ls-files

// 604bd36eb5 * MyProject/Libraries/opencv2.framework/Versions/A/opencv2

  1. 推送提交并查看Git是否首先上传大文件

    git push

// Git LFS:(1个文件中的1)3.54 MB / 87.34 MB

完成。


6
好的答案,但是假设我有一堆 .framework 文件,有没有办法找出所有大型二进制文件所在的框架,而不是一个一个手动查找? - Richard Fu
在Linux中运行此命令以打印出目录中前250个最大的文件。搜索任何.framework并手动将其添加到您的.gitattributes中,包括完整路径。“find . -type f -exec ls -alh {} ; | sort -hr -k5 | head -n 250”MyProject/Assets/FacebookSDK/Plugins/iOS/FBSDKShareKit.framework/FBSDKShareKit filter=lfs diff=lfs merge=lfs -text - Gandalf458
有趣的是,在我的 Mac 上这并没有起作用。 - BonanzaDriver

7
您可以按照以下步骤将所有框架添加到Git LFS中:
brew install git-lfs                                 # install via homebrew
git lfs install                                      # initialize lfs for yor repo
git lfs track ios-app/Frameworks/*.framework/**/*    # track all frameworks in your project
git add --all                                        # stage
git commit -m "Added files to git lfs"               # commit
git lfs ls-files                                     # check that files are tracked

最终你应该得到以下结果:

9ee501fdc8 * ios-app/Frameworks/Lottie.framework/Headers/Lottie-Swift.h
8fa3ecc835 * ios-app/Frameworks/Lottie.framework/Info.plist
4a870aa4cc * ios-app/Frameworks/Lottie.framework/Lottie

请注意,这将不会将任何现有的文件转换为 Git LFS(从其他分支或之前的提交历史记录中)。如果要执行此操作,请使用 git lfs migrate 命令:

git lfs migrate import --include='ios-app/Frameworks/*.framework/**/*' --everything

我曾经遇到过类似的问题,添加XCFrameworks到LFS时,使用*.xcframework/**/*而不是仅使用*.xcframework有所帮助。谢谢! - kelin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接