【Debug-git】error:. local changes to the following files would be overwritten by merge:.idea/misc.xml
阿新 • • 發佈:2019-01-28
公司、個人編譯環境可能是有某些不為人知的差異,每次用git命令pull的時候,總會遇到一些奇葩問題,比如:
...done. Resolving deltas: 100% (55/55), completed with 29 local objects. From https://git.xxxx.xxx/xxxxxxxx/xxxxxx * branch master -> FETCH_HEAD 9******..******d master -> origin/master error: Your local changes to the following files would be overwritten by merge: .idea/misc.xml Please commit your changes or stash them before you merge. Aborting Updating 9******..******d
前兩次因為時間的原因,要麼把這個被覆蓋的“.idea/misc.xml”本地檔案刪掉,要麼直接生氣了刪掉本地專案重新clone。
這終究不是一個辦法,今天解決一下吧。
首先,這個檔案是什麼?
【.idea/misc.xml】
知乎上的一個回答是醬紫的:
.idea #ide 相關 *.apk #optional
是在系統預設的.gitignore檔案基礎上額外新增的,如果不加 .idea的話會存在不同開發人員開發機上.idea/下檔案不同,導致需要提交的問題。而且經過我和團隊小夥伴之間的實踐.idea目錄下的東西AS都會自動生成,並不需要提交到倉庫中
開啟看一眼這個檔案裡都有啥:
<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="NullableNotNullManager"> <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> <option name="myNullables"> <value> <list size="5"> <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> <item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" /> <item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> <item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> </list> </value> </option> <option name="myNotNulls"> <value> <list size="4"> <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> </list> </value> </option> </component> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8 (9)" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> <option name="id" value="Android" /> </component> </project>
【.idea/modules.xml】
這個檔案告訴編譯器你要有哪幾個子專案,不分主次。在Android Studio中開啟看一眼:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<!--module指定需要編譯lib或者主程式絕對路徑、相對路徑-->
<module fileurl="file://$PROJECT_DIR$/ExportJar.iml" filepath="$PROJECT_DIR$/ExportJar.iml" />
<module fileurl="file://$PROJECT_DIR$/child/child.iml" filepath="$PROJECT_DIR$/child/child.iml" />
</modules>
</component>
</project>
【根目錄.iml】
iml檔案是一個工程配置檔案。這個檔案的作用見如下注釋部分:
<?xml version="1.0" encoding="UTF-8"?>
<module type="PLUGIN_MODULE" version="4">
<component name="DevKit.ModuleBuildProperties" url="file://$MODULE_DIR$/resources/META-INF/plugin.xml" /><!--intellij外掛配置檔案-->
<component name="NewModuleRootManager" inherit-compiler-output="true"><!--使用預設編譯輸出目錄,編譯器會將編譯的class檔案放到此目錄中-->
<exclude-output />
<content url="file://$MODULE_DIR$"><!--指定專案根目錄-->
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /><!--指定Source原始碼目錄-->
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" /><!--指定資原始檔目錄-->
</content>
<orderEntry type="inheritedJdk" /><!---->
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="child" /><!--指定lib模組-->
</component>
</module>
這幾個檔案中,【根目錄.iml】檔案沒什麼爭議,一般需要放進【.gitignore】中讓git自動忽略,但【根目錄.idea】資料夾下的檔案我的git只忽略了兩個檔案,我的“.gitignore”檔案預設忽略的是:
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
查了一下,2015年之前早期的回答中,大家配置的忽略檔案都比較多,【.idea/misc.xml】【.idea/modules.xml】都在“.gitignore”之列,更有甚者整個【.idae】資料夾都在忽略之內。而近期的回答中,基本與本人的“.gitignore”無異。鑑於上文知乎科學家的建議,本人試一下把這兩個檔案手動新增到“.gitignore”之列試試。
/.idea/misc.xml
/.idea/modules.xml
先這麼著吧~