在Android Studio 2.3.2(在3.0中具有相同的行爲)從Java到Kotlin的轉換會創建一個新文件並刪除以前的文件。所以Git不知道這個轉換。並且git歷史記錄不會保存。在Intellij Idea中一切都很好。 IDE只是重命名文件,git保存歷史記錄。在Android Studio中如何做到這一點。在Android Studio中將文件(使用Git進行跟蹤)從Java轉換爲Kotlin
回答
Git會從已添加/已刪除的文件對中進行重命名,但前提是這些文件足夠接近,即文件是否被重命名爲沒有更改或少量更改。
當您應用java-to-kotlin轉換時,通常文件的每一行都會發生更改,以便git無法找到這些新舊文件彼此之間的關聯關係。
您可以使用以下兩個階段的方法來代替:
- 只是改變
.java
文件的擴展.kt
並提交; - 重命名它,應用轉換並提交修改的
.kt
文件。
我用這種方法。第一次提交是確定的,並指示移動。然後我應用轉換並使用「修改」選項提交.kt文件(僅保留一個提交)。然後,最終的提交確實顯示「重命名」,但刪除和添加。我想這是因爲上面提到的原因。 –
如果我創建了兩個提交(一個用於重命名java - > kt,一個用於實際轉換),那麼它將工作:鏈接保持不變。然而,這使得歷史有點尷尬,因爲第一個註釋指向一個完全無效的代碼... –
當然,第一次提交會很奇怪。沒有任何選擇是理想的,但你必須在兩者之間進行選擇。您是否想要放棄文件的歷史記錄? – tasomaniac
Git實際上並不直接跟蹤重命名;它根據文件添加/刪除對來推斷它們。我假設Idea在重命名時運行的是git add
,而Android Studio只是刪除舊文件。嘗試在新文件上運行git add
,在舊文件上運行git rm
,Git應該將它們顯示爲重命名。
其實我無法手動控制這一切。我只是使用標準命令「將java文件轉換爲kotlin文件」,結果我得到了刪除舊文件並創建了新文件(已經添加到git中)。我的猜測是IDE不使用mv或git mv命令。所以我看到提交兩個文件:刪除Sample.java,並添加Sample.kt。我可以做的唯一事情是保存歷史記錄,以反轉Sample.java並將Sample.kt的內容保存到Sample.java。然後刪除Sample.kt並將Sample.java重命名爲Sample.kt。這是一種痛苦! –
Git沒有內部重命名的概念。如果刪除一個文件並添加具有相同內容的另一個文件,它將啓發式地確定它是重命名的。你不能說它是重命名。這聽起來像你正在查看某個接口的潛在提交,它不會啓發式地確定重命名。您可以在複製/重命名步驟之前和之後鍵入'git status'嗎?之前和之後的狀態將是相同的。 – adzenith
正如在其他答案中提到的,git跟蹤文件的內容,而不是它的重命名。當git log
與--follow
選項一起運行時,它顯示的歷史記錄不是重命名的,但它認爲只有當前和當前文件內容的相似度指數爲50%或更多(即少於文件行的一半)纔會重命名文件改變。
對於這種情況,大部分線路已經改變,你可以使用-M
選項設置爲相似性指數較低的酒吧:
git log -M20% --follow -- /path/to/file
根據不同的情況下,你可能需要去甚至更低超過20%。
- 1. 如何將Java文件轉換爲Kotlin文件?
- 2. 如何在git中對未跟蹤的文件進行備份
- 3. 如何將kotlin源文件轉換爲java源文件
- 4. 在Exchange Server中使用java api進行郵件跟蹤
- 5. 我如何從二進制轉換爲Java中的十進制(使用android studio)
- 6. 如何使用Git跟蹤.txt文件?
- 7. 使用opencv進行Android角落跟蹤
- 8. 什麼是GIT中的跟蹤文件和未跟蹤文件?
- 9. 如何將git分支轉換爲遠程跟蹤的分支?
- 10. 將跟蹤的文件移動到未跟蹤的git
- 11. Git沒有跟蹤文件
- 12. GIT沒有跟蹤文件
- 13. git clean只跟蹤文件
- 14. 將事件跟蹤代碼從Jquery轉換爲Mootools
- 15. 使用Git從跟蹤中刪除文件時遇到問題
- 16. 將PCAP跟蹤轉換爲NetFlow格式
- 17. 跟蹤轉換
- 18. 將堆棧跟蹤轉換爲值
- 19. 使用GA事件跟蹤進行視頻跟蹤
- 20. 使用代碼管理器進行AdWords轉換跟蹤
- 21. 使用java將文件轉換爲PDF
- 22. 將java文件轉換爲android程序
- 23. 使用Google Analytics進行軟件跟蹤
- 24. 使用GIT跟蹤Linux樹中的特定文件夾/文件
- 25. 在git中跟蹤sqlite3二進制文件的正確方法?
- 26. 轉換java類文件爲kotlin使編譯錯誤
- 27. 如何在RStudio中使用隱藏未跟蹤的git文件?
- 28. 不要跟蹤文件,而要在Git中更換文件時更換
- 29. 將ArrayMap轉換爲ArrayList - Kotlin
- 30. git忽略正在跟蹤的文件
此答案https://stackoverflow.com/a/39152021/70930解釋了Git如何識別文件重命名,並且沒有辦法明確告訴Git有關正在重命名的文件。 – Paul
謝謝,但Android Studio和Idea有什麼區別。爲什麼Git在一種情況下可以跟蹤文件的內容,而在另一種情況下不能? –
這是您在Android Studio和Idea中轉換的文件嗎?如果文件不同,那麼轉換後的更改量可能不同,因此在一種情況下會檢測到重命名,而另一種情況則不會。 – Paul