- 本文講的是原有
iOS項目集成flutter module后,多人開發(fā)的gitignore配置問題。
問題
剛開始我一個人開發(fā)flutter沒問題,后來小伙伴加入后,多人開發(fā)后,每次拉完代碼都會有一大堆的編譯文件產(chǎn)生。但這寫文件我明明已經(jīng)加入到gitignore中了,為什么不生效,我一直很奇怪。
經(jīng)過了幾次提交代碼都會有很多編譯產(chǎn)生的垃圾文件導(dǎo)致更新代碼慢之后,我決定要徹底解決它了。
答案
在百度中終于找到了答案,原來是我在創(chuàng)建項目的時候使用的gitignore是碼云幫我自動生成的,但是生成的這個gitignore并不全,所以導(dǎo)致很多編譯文件沒有被忽略。后面雖然我在github上copy的官方的gitignore文件,但由于對git的忽略文件認(rèn)識不足,才導(dǎo)致上面的事情發(fā)生。
gitignore注意事項
這里把gitignore文件使用的注意事項記錄一下:
1、gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經(jīng)被納入了版本管理中,則修改.gitignore是無效的。
2、但是有時候,gitignore考慮不全面,發(fā)現(xiàn)有不該提交的文件已經(jīng)提交后,僅僅在.gitignore中加入忽略是不行的。這個時候需要執(zhí)行: git rm -r --cached filename去掉已經(jīng)托管的文件,然后提交即可。
3、 如果大面積的修改gitignore文件直接使用下面的方式更方便:
首先進(jìn)入到
git倉庫目錄下執(zhí)行:
git rm -r --cached .
然后執(zhí)行:
git add .
將上面的執(zhí)行結(jié)果提交
git commit -am "Remove ignored files"
最后更新本地代碼,然后本地的修改推送到遠(yuǎn)程
git pull origin branch-name
git push origin branch-name
最后我是通過執(zhí)行3的步驟把問題解決掉的
gitignore內(nèi)容
這里把我修改后的gitignore文件內(nèi)容貼在下面,注意只針對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,但是真實(shí)的路徑已經(jīng)變了,所以這里也要修改
**/.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
# 這兩個編譯產(chǎn)生的文件也忽略掉
**/.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
后續(xù)
- 在我按照上面步驟處理好后,本地不再有編譯產(chǎn)生的文件,拉新代碼再編譯也不再有編譯產(chǎn)生的文件,但是小伙伴們的問題還是存在,我又讓每個小伙伴在自己的電腦上按照上面的步驟處理了一遍,然后就好了。
問題又來了
- 在我將編譯產(chǎn)生的那些文件忽略后,在我再次運(yùn)行
flutter module項目時可以看到Prometheum/flutter_prometheum/.ios/Flutter/App.framework和Prometheum/flutter_prometheum/.ios/Flutter/engine兩個文件夾下的內(nèi)容就沒有了。這個時候如果只運(yùn)行flutter module沒什么問題。如果我在native工程上通過Xcode運(yùn)行就會有問題,尤其是在執(zhí)行過pod install后再編譯native工程就會提示我們<Flutter/Flutter.h>文件找不到,這個時候我們?nèi)?code>Pods/Development Pods/Flutter/Frameworks/Flutter.framework發(fā)現(xiàn)該framework下是空的,沒有頭文件,我們通過show in finder查看該文件路徑,發(fā)現(xiàn)該文件是處在被我忽略的Prometheum/flutter_prometheum/.ios/Flutter/engine文件夾下的,此時該文件夾下確實(shí)是空的,問題源頭找到了。
解決
- 此時我在本地有將上面兩個文件夾從忽略文件中刪除了,然后再運(yùn)行
flutter module項目,編譯后framework又出現(xiàn)了,然后我再去native工程中執(zhí)行pod install,再去Pods/Development Pods/Flutter/Frameworks/Flutter.framework查看發(fā)現(xiàn)頭文件有了,再編譯也不會報錯了,O(∩_∩)O哈哈~
后續(xù)
隨著Flutter的知識了解越來越多,我發(fā)現(xiàn)當(dāng)我執(zhí)行flutter clean 的時候會把編譯生成的.ios等目錄刪掉,那么我想既然這個目錄每次編譯都能重新創(chuàng)建,那么沒必要將其加入版本控制里面去,于是乎我決定新建一個倉庫試一下。
我重新到flutter 官網(wǎng)復(fù)制了一份ignore文件并稍作修改,也就是針對android和ios編譯產(chǎn)生的文件分別添加了**/.android/和 **/.ios/
好像flutter官網(wǎng)的gitignore文件經(jīng)常更新,所以新建項目的話最好去官網(wǎng)獲取最新的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