.gitignore文件_【第1739期】為Git倉庫里的.idea文件夾正名

前言

.idea該不該提交到代碼倉庫中呢?你的意見呢?今日早讀文章由《Flask Web開發》作者@李輝分享。

正文從這開始~~

在網絡上,我曾多次看到人們對于Git倉庫中的.idea文件夾的偏見。最近的一次是在某個博客中技術專家對于志愿者提交的項目的點評,其中在“項目規范”中有一條加分項為“沒有 .idea 這種不該上傳的文件夾”;另一次是在知乎評價某程序員的問題下某個回答的評論中,有人發現該程序員的GitHub倉庫里有.idea目錄,就居高臨下的將其作為理由諷刺該程序員,潛臺詞即“項目里有.idea = 水平低下”。想當然的,我沒看到的類似情況會更多,而這些觀點又會影響很多不熟悉具體事實的人,我想我應該盡一份力來改變這個錯誤的觀點繼續蔓延。

提示 盡管本文的標題使用了Git,本文的內容同樣適用于其他VCS(Version Control System,版本控制系統)。

什么是.idea文件夾

當你使用JetBrains出品的IDE(Integrated Development Enviroment,集成開發環境)時,比如PyCharm、WebStorm或IntelliJ IDEA等,它們會在創建項目后在項目根目錄創建一個.idea文件夾,其中保存了項目特定的配置文件。

至于為什么命名為.idea,則是因為IntelliJ IDEA是JetBrains最早推出的IDE(JetBrains一開始叫IntelliJ),因此使用IDEA作為配置文件夾的名稱。按照這個SO問題里最高票答案的猜測,或許IntelliJ IDEA這個名字的含義是這樣組成的:

  • Intelli ===> Intelligent

  • J ===> Java

  • Idea ===>IDE that is Advanced or Idea just means idea( I have a good idea ...like this ) ...

是否應該把.idea提交進Git倉庫

這個問題沒有唯一的答案,在Stack Overflow有很多類似的討論。總的來說,開發者可以自由選擇是否把IDE相關的配置文件(這里即.idea目錄下的文件)提交到Git倉庫中:

如果你想讓其他使用相同IDE的用戶可以更方便或規范的對項目進行開發,那么就把它提交到Git倉庫中。比如,你可以設置文件模板(.idea/fileTemplates),定義代碼風格(.idea/codeStyleSettings.xml),定義檢查器(.idea/inspectionProfiles/),這樣其他開發成員可以很方便的上手項目,這會比寫在“貢獻指南”約束性強一些。

如果你覺得Git倉庫不應該包含和項目本身無關的文件,那么也可以不將它提交到Git倉庫中。

正確的提交方法

當然,將.idea目錄整個提交到Git倉庫的行為并不可取。因為.idea目錄下的文件中有包含隱私的內容(比如你的文件操作變動、用戶詞典、系統環境變量、數據庫密碼等等),或是臨時生成的文件,這些文件對項目其他的參與者沒有用處,而且會泄露你的隱私或是影響正常開發。

如果你選擇將.idea目錄提交僅Git倉庫,那么需要稍微多付出一些工作。

按照JetBrains官方的建議,在使用VCS時提交.idea文件夾應該遵循下面的原則:

1. 分享下面的文件:

除了workspace.xml、usage.statistics.xml和tasks.xml以外.idea目錄下的所有文件 所有可以被在不同模塊目錄下定位到的.iml模塊文件(適用于IntelliJ IDEA)

2. 謹慎分享下面的文件:

Android artifacts that produce a signed build,因為它們包含keystore密碼(前半句不理解,暫時保留原文)

在IntelliJ IDEA 13 和之前的版本中的dataSources.ids和datasources.xml文件,它們包含數據庫密碼

3. 避免分享下面的文件:

對于使用Gradle或Maven的項目,避免分享.iml和.idea/modules.xml文件,因為它們會在導入時生成gradle.xml文件

用戶字典(dictionaries文件夾)

.idea/libraries目錄下的XML文件,因為它們會從Gradle或Maven項目中生成

4. 另外,對于舊的項目格式(.ipr/.iml/.iws files)來說:

分享項目.ipr文件和所有的.iml模塊文件,不要分享.iws文件,因為它存儲用戶特定設置。

對于Git,你可以參考GitHub提供的JetBrains適用的.gitignore模板。

我的還沒上市的新書中包含多個Flask項目,這些項目中的.gitignore文件則是通過gitignore.io來生成的。你可以在gitignore.io主頁的輸入框中輸入你使用的操作系統、編程語言和IDE,它會快速為你來生成一份適用這些語言和平臺的.gitignore規則,比如下面三個模板分別對應三個操作系統下的PyCharm開發環境:

  • macOS + Python + PyCharm

  • Linux + Python + PyCharm

  • Windows + Python + PyCharm

你可以在這些模板的基礎上添加自定義規則。

有選擇的提交.idea的好處

在評論區,已經有很多知友給出了反對提交.idea文件夾的,或是說反對將IDE配置提交到Git倉庫的理由。我沒有太多開發經驗,沒法一一進行解釋。首先,我在前面已經說到,這件事情包含很大爭議,你可以自由選擇做與不做。但是我還是想為提交

  • .idea/vcs.xml

  • .idea/fileTemplates/

  • .idea/inspectionProfiles/

  • .idea/scopes/

  • .idea/codeStyleSettings.xml

  • .idea/encodings.xml

  • .idea/copyright/

  • .idea/compiler.xml

總結

如果你不想在Git倉庫中提交IDE相關的配置文件,那么你可以忽略.idea文件夾;相反,你也可以有選擇的把.idea目錄下的文件提交進Git倉庫。也就是說,項目Git倉庫中是否包含.idea文件夾與程序員的開發水平并沒有直接關系。

水平高低不知道,反正這么多開源項目沒見過一個有.idea的

“這么多”是多少?先不說BitBucket等其他平臺,光Github上的開源項目就有6700萬(數據來自GitHub 2017報告)。在Google搜“tree/master/.idea site:github.com”有約15萬結果,就算去掉5萬不相關結果,10萬不多嗎?

可現實是有idea的基本都是垃圾代碼。新手想不到這么細也沒有那個耐心去一一甄別,再將其添加到ignore里面,老手講究項目通用性也不會將idea上傳。idea里面的東西對人類來說多是不可讀(不友好)的,還會干擾正常的項目配置。

在Google搜“tree/master/.idea site:github.com”的15萬結果里,假如把Stars數量作為項目質量評價標準的話,前幾頁就可以看到這些包含.idea且Stars超過1000的項目(鏈接后為Stars數量):

  • clojure/clojure 7192

  • Day8/re-frame 3243

  • JetBrains/kotlin 22905

  • corda/corda 1988

  • ktorio/ktor 2896

  • airbnb/epoxy 4070

  • mattgodbolt/compiler-explorer 4246

  • AnalyticalGraphicsInc/cesium 3245

  • http4s/http4s 1106

現實是有idea的基本都是垃圾代碼

我并沒有看到這種情況。

新手想不到這么細也沒有那個耐心去一一甄別,再將其添加到ignore里面

我承認這是現實。如果看到這篇文章的新手想要選擇把.idea提交到Git倉庫,那么我在文章中已經介紹了如何方便的創建合適的.gitignore規則。

老手講究項目通用性也不會將idea上傳

上面列出的這些項目都是新手創建的?

idea里面的東西對人類來說多是不可讀(不友好)的,還會干擾正常的項目配置。

.idea里文件基本均為XML文件,XML不可讀?我在XML的維基百科詞條看到XML的介紹是“XML is a markup language that defines a set of rules for encoding documents in a format that is both human-readable and machine-readable.”,可以看到XML的設計理念就是同時對人類和機器來說都具備可讀性。通過我在文章里介紹的方式生成對應的.gitignore規則并不會干擾正常的項目配置。

這個可能你會需要:https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore

關于本文 作者:@李輝 原文:https://zhuanlan.zhihu.com/p/38348372

9161c6157c8e8c3e82ebb728df51a7fd.png

為你推薦

【第1707期】談談 Git Merge 和 Git Rebase 的應用

【第1623期】30分鐘讓你掌握Git的黑魔法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532243.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

監控linux時間不對,shell 計算故障時間 配合web監控

#!/bin/bash#checkfail.log 為SHELL監控網站時間存放的日志文件 https://blog.51cto.com/junhai/2437965fail_time(){starttimetail -n 1000 checkfail.log |grep "$url"|grep "第1次"|tail -n 3|head -n 1|awk {print $1, $2} #取網站掛掉的時間endtimet…

linux redis清空數據恢復,Redis數據恢復--誤刪數據后一次嚇尿的經歷

1、起因,一個flushdb命令因為誤操作,輸入了一個flushdb命令,導到redis里0號庫里的數據全部清空,OMG,這里有不少重要信息,如果被領導知道,必開除2、appendonly留有生機仔細想想,當時數…

c語言 枚舉類型 uint32_淺談C語言枚舉類型 | 附自創用法分享

經濟學家說過,路邊是不會有100元的;但如果有,你還是要撿起來。同理,在貌似萬物免費的網絡時代,你是很難找到有針對性的好資料;但是如果有,希望你能認真學習吸收。比如筆者今天寫的這一篇一今天這…

linux在bin下加入ssh,移植?ssh?到開發板

2》編譯/home/arm下新建目錄sshwork,并且將源碼復制到該目錄下mkdir /home/arm/sshworkcp zlib-1.2.3.tar.gz openssl-0.9.8d.tar.gz openssh-4.6p1.tar.gz/home/arm/sshwork/home/arm/sshwork下新建目錄lib,用來保存生成的庫文件。mkdir /home/arm/sshw…

java pdf增刪改查_如何利用Java代碼操作索引庫?

今天是劉小愛自學Java的第161天。感謝你的觀看,謝謝你。學習計劃安排如下:學了幾天的Elasticserch,但都是它本身的知識點,如何通過Java語言去操作它呢?這就好比以前學數據庫,在數據庫工具中通過sql語句也能…

linux shell 第幾行,Linux shell 獲得字符串所在行數及位置

shell 獲得字符串所在行數及位置01 獲取字符串所在的行數方式一:用grep -n[rootroot]# cat testapplebitcreatedelectexeflowgood[rootroot]# cat test | grep -n exe5:exe[rootroot]# cat test | grep -n exe | awk -F ":" {print $1}5方式二&#xff1a…

sublime text3 怎么配置、運行python_SublimeText3按ctrl+b執行python無反應

最后更新時間:2017-09-14 現象: 在Sublime中打開.py文件,按”ctrlb”執行時無反應。點擊工具->編譯系統中已經有且識別到Python,但執行”run(ctrlshiftb)”時無反應,Sublime左下角提示”No B…

linux 火鍋平臺,“定制版火鍋”來襲,持續創新才能永葆活力

原標題:“定制版火鍋”來襲,持續創新才能永葆活力5月1日,重慶涪陵紅酒小鎮的一家轉轉火鍋店,推出“五一”定制版火鍋免費請游客品嘗。廣西的螺螄粉、貴州的折耳根、湖南臭豆腐、福建烏龍茶、重慶榨菜、河南胡辣湯、陜西老陳醋、海…

internetreadfile讀取數據長度為0_YOLOV3的TensorFlow2.0實現,支持在自己的數據集上訓練...

GitHub鏈接:calmisential/YOLOv3_TensorFlow2?github.com我主要參考了yolov3的一個keras實現版本:qqwweee/keras-yolo3?github.com目前支持在PASCAL VOC 2012數據集上訓練和自定義數據集上訓練,具體的訓練過程可參考項目倉庫中的README文檔…

c語言用鏈表對學生成績排序,學生成績排序和平均分計算利用c語言鏈表的創建插入刪除.doc...

#define NULL 0#define LEN sizeof(struct student)struct student{long num;float score;struct student *next;};int n;struct student *creat(void)//創建鏈表{struct student *head;struct student *p1,*p2;n0;p1p2(struct student*)malloc(LEN);scanf("%ld,%f",…

深井軟巖巷道群支護技術與應用_深井軟巖巷道深淺孔帷幕注漿技術

一、成果內容1.基本原理對失修巷道進行刷擴、支護,滿足使用斷面后進行幫頂噴漿、底板整平,先底板注漿,然后幫、頂注漿。錨架充支護巷道直接底板整平后,先底板后幫、頂注漿。通過全斷面深淺孔聯合注水泥漿進行巷道加固,…

店鋪咨詢系統c語言,課內資源

1 題目介紹1.1 問題描述出于不同目的的旅客對交通工具和交通路徑有不同的要求。例如,因公出差的旅客希望在旅途中的時間盡可能短,出門旅游的游客則期望旅費盡可能省,而老年旅客則要求中轉次數最少。編制一個交通咨詢系統程序,為旅客提供最優決策的交通咨詢。1.2 需求分析提供對…

f分布表完整圖_【教育統計答疑】如何理解正態分布、均值分布、^2分布、t分布和F分布...

許多教育統計的初學者都表示這幾個分布感到學起來非常吃力,結合最近上課的體會以及答疑的情況,覺得很有必要在這里簡單地對這部分內容進行澄清和梳理,以助理解。首先,“為什么要學習這幾個分布”可能是許多人糾結的問題&#xff0…

c語言第一章考試題及答案,C語言考試題庫及答案整理版.doc

C語言考試題庫及答案整理版.docC語言理論上機考試選擇題部分(共200題)1、下面程序的輸出是___D______#includevoid main(){ int k11;printf("k%d,k%o,k%x\n",k,k,k);}A) k11,k12,k11 B) k11,k13,k13C) k11,k013,k0xb D) k11,k13,kb2、在下列選項中,不正確的賦值語句是…

python每天定時9點執行_python每天定時運行某程序代碼

思路:利用time函數返回的時間字符串與指定時間字符串做比較,相等的時候執行對應的操作。不知道大家的思路是什么,感覺這樣比較耗CPU。。。。 此處設置為15:30:10 輸出相應內容,需要執行什么,就修改什么。 import time …

新穎的c語言題目,新穎版c語言經典習題100例(全面面)

新穎版c語言經典習題100例(全面面) (66頁)本資源提供全文預覽,點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧,查找使用更方便哦!19.90 積分實用文檔C語言習題100例(最新整理版)習題目錄:(按住Ctrl點擊可以快速跳轉到…

c語言jt808協議庫,平臺如何應答——關于JT/T808協議

前兩篇也說明了一些應答的相關內容,對于剛接觸的開發者來說恐怕還是不太容易理解,這里專門列舉一個篇幅來講解如何針對終端設備上報的信息進行應答。嚴格來講,如果不應答,終端設備會判別為服務平臺斷開連接,就會重復發…

熊貓的python小課賬號_學習python中的pandas有沒有好的教程推薦?

之前好多人私信我python數據分析怎么快速入門,我在這里直接介紹一下自己的心得經驗吧。 要學習pandas,我并不建議看大量的教程,等看完教程,天都黑了,一覺醒來熱情都涼了。 我的建議是,首先放平心態&#xf…

rssi定位算法 c語言,【論文※】An RSSI Gradient-based AP Localization Algorithm 基于RSSI梯度的AP定位算法...

摘要:Recent rapid rise of indoor location based services for smartphones has further increased the importance of precise localization of Wi-Fi Access Point(AP).However,most existing AP localization algorithms either exhibit high errors or need s…

arm體系結構與編程_教程:如何學習嵌入式系統(基于ARM平臺)

一、嵌入式系統的概念 著重理解“嵌入”的概念 主要從三個方面上來理解。 1、從硬件上,將基于CPU的處圍器件,整合到CPU芯片內部,比如早期基于X86體系結構下的計算機,CPU只是有運算器和累加器的功能,一切芯片要造外部…