- 本文讲的是原有
iOS
项目集成flutter module
后,多人开发的gitignore
配置问题。
问题
刚开始我一个人开发flutter
没问题,后来小伙伴加入后,多人开发后,每次拉完代码都会有一大堆的编译文件产生。但这写文件我明明已经加入到gitignore
中了,为什么不生效,我一直很奇怪。
经过了几次提交代码都会有很多编译产生的垃圾文件导致更新代码慢之后,我决定要彻底解决它了。
答案
在百度中终于找到了答案,原来是我在创建项目的时候使用的gitignore
是码云帮我自动生成的,但是生成的这个gitignore
并不全,所以导致很多编译文件没有被忽略。后面虽然我在github
上copy
的官方的gitignore
文件,但由于对git
的忽略文件认识不足,才导致上面的事情发生。
gitignore注意事项
这里把gitignore
文件使用的注意事项记录一下:
1、gitignore
只能忽略那些原来没有被track
的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore
是无效的。
2、但是有时候,gitignore
考虑不全面,发现有不该提交的文件已经提交后,仅仅在.gitignore
中加入忽略是不行的。这个时候需要执行: git rm -r --cached filename
去掉已经托管的文件,然后提交即可。
3、 如果大面积的修改gitignore
文件直接使用下面的方式更方便:
首先进入到
git
仓库目录下执行:
git rm -r --cached .
然后执行:
git add .
将上面的执行结果提交
git commit -am "Remove ignored files"
最后更新本地代码,然后本地的修改推送到远程
git pull origin branch-name
git push origin branch-name
最后我是通过执行3的步骤把问题解决掉的
gitignore内容
这里把我修改后的gitignore文件内容贴在下面,注意只针对iOS,android的话,可能不对
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# Visual Studio Code related
.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.packages
.pub-cache/
.pub/
/build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
#这里注意下面的 官方的是**/ios这里需要修改成**/.ios
**/.ios/**/*.mode1v3
**/.ios/**/*.mode2v3
**/.ios/**/*.moved-aside
**/.ios/**/*.pbxuser
**/.ios/**/*.perspectivev3
**/.ios/**/*sync/
**/.ios/**/.sconsign.dblite
**/.ios/**/.tags*
**/.ios/**/.vagrant/
**/.ios/**/DerivedData/
**/.ios/**/Icon?
**/.ios/**/Pods/
**/.ios/**/.symlinks/
**/.ios/**/profile
**/.ios/**/xcuserdata
**/.ios/.generated/
**/.ios/Flutter/App.framework
**/.ios/Flutter/Flutter.framework
# 这里官方的还是**/.ios/Flutter/Flutter.framework,但是真实的路径已经变了,所以这里也要修改
**/.ios/Flutter/engine/Flutter.framework
**/.ios/Flutter/Generated.xcconfig
**/.ios/Flutter/app.flx
**/.ios/Flutter/app.zip
**/.ios/Flutter/flutter_assets/
**/.ios/ServiceDefinitions.json
**/.ios/Runner/GeneratedPluginRegistrant.*
**/.ios/Flutter/flutter_export_environment.sh
# 这两个编译产生的文件也忽略掉
**/.ios/Runner.xcworkspace/xcshareddata
**.ios/Runner.xcworkspace/xcuserdata
**/.ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
后续
- 在我按照上面步骤处理好后,本地不再有编译产生的文件,拉新代码再编译也不再有编译产生的文件,但是小伙伴们的问题还是存在,我又让每个小伙伴在自己的电脑上按照上面的步骤处理了一遍,然后就好了。
问题又来了
- 在我将编译产生的那些文件忽略后,在我再次运行
flutter module
项目时可以看到Prometheum/flutter_prometheum/.ios/Flutter/App.framework
和Prometheum/flutter_prometheum/.ios/Flutter/engine
两个文件夹下的内容就没有了。这个时候如果只运行flutter module
没什么问题。如果我在native
工程上通过Xcode
运行就会有问题,尤其是在执行过pod install
后再编译native
工程就会提示我们<Flutter/Flutter.h>
文件找不到,这个时候我们去Pods/Development Pods/Flutter/Frameworks/Flutter.framework
发现该framework下是空的,没有头文件,我们通过show in finder
查看该文件路径,发现该文件是处在被我忽略的Prometheum/flutter_prometheum/.ios/Flutter/engine
文件夹下的,此时该文件夹下确实是空的,问题源头找到了。
解决
- 此时我在本地有将上面两个文件夹从忽略文件中删除了,然后再运行
flutter module
项目,编译后framework
又出现了,然后我再去native
工程中执行pod install
,再去Pods/Development Pods/Flutter/Frameworks/Flutter.framework
查看发现头文件有了,再编译也不会报错了,O(∩_∩)O哈哈~
后续
随着Flutter的知识了解越来越多,我发现当我执行flutter clean 的时候会把编译生成的.ios等目录删掉,那么我想既然这个目录每次编译都能重新创建,那么没必要将其加入版本控制里面去,于是乎我决定新建一个仓库试一下。
我重新到flutter 官网复制了一份ignore文件并稍作修改,也就是针对android和ios编译产生的文件分别添加了**/.android/
和 **/.ios/
好像flutter官网的gitignore文件经常更新,所以新建项目的话最好去官网获取最新的ignore文件,然后修改
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# Visual Studio Code related
.classpath
.project
.settings/
.vscode/
# Flutter repo-specific
/bin/cache/
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/devicelab/ABresults*.json
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
analysis_benchmark.json
# packages file containing multi-root paths
.packages.generated
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
# Android related
# 下面这句是我添加的
**/.android/
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
# iOS/XCode related
# 下面这句是我添加的
**/.ios/
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# macOS
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/Flutter-Debug.xcconfig
**/macos/Flutter/Flutter-Release.xcconfig
**/macos/Flutter/Flutter-Profile.xcconfig
# Coverage
coverage/
# Symbols
app.*.symbols
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock