剛學git時,一股腦吧全部文件所有加到版本管理中,
如今作Android開發,這樣作就有很大的問題了,
gen 和bin 文件夾下的文件是編譯生成的,最好不要加到版本管理中,最好加入到.gitignore文件中(這兩個文件夾要留,只是把文件夾下的文件移除版本管理庫)
但是,我已經加入到了版本管理中,怎麼辦?
通常來講,使用「git rm」命令
// 下面就以刪除bin文件夾爲例子,刪除gen等文件,也是同樣的道理,以此類推
1.剛開始 使用的是 git rm -r -n */gengen」)
參數解釋:-r 遞歸移除目錄,(Allow recursive removal when a leading directory name is given.)
-n:加上這個參數,執行命令時,是不會刪除任何文件,而是展現此命令要刪除的文件列表預覽,因此通常用這個參數先看看要刪除哪些文件,防止誤刪,確認以後,就去掉此參數,真正的刪除文件。 (Don't actually remove any file(s). Instead, just show if they exist in the index and would otherwise be
removed by the command.)
可是上面的命令真正會刪除文件,我以爲,我須要的只是從版本管理庫中刪除,再也不跟蹤此文件,而硬盤上的這個文件仍是要的,因此,上面的命令還要增長參數來實現此目的。
引用:
咱們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然希 望保留在當前工做目錄中。換句話說,僅是從跟蹤清單中刪除。好比一些大型日誌文件或者 一堆 .a 編譯文件,不當心歸入倉庫後,要移除跟蹤但不刪除文件,以便稍後在 .gitignore 文件中補上,用 --cached 選項便可:\******************開始***************\
\******************結束***************\
2.按照上面的引用,我修改的命令以下:
git rm -r -n --cached */bin
git rm *~ (只刪除當前目錄下以「~」結尾的文件)
注意到星號 * 以前的反斜槓 \,由於 Git 有它本身的文件模式擴展匹配方式,因此咱們 不用 shell 來幫忙展開(譯註:實際上不加反斜槓也能夠運行,只不過按照 shell 擴展的 話,僅僅刪除指定目錄下的文件而不會遞歸匹配。上面的例子原本就指定了目錄,因此效果 等同,但下面的例子就會用遞歸方式匹配,因此必須加反斜槓。)。此命令刪除全部 log/ 目錄下擴展名爲 .log 的文件。相似的好比:
git rm \*~ (會遞歸的刪除當前目錄 以及 子目錄下的以「~」結尾的文件)
會遞歸刪除當前目錄及其子目錄中全部 ~ 結尾的文件。
因此我最後的命令是
git rm -r -n --cached */bin/\* (注意:此命令會真正刪除文件,你能夠加上"-n"參數 查看文件列表)
3.刪除gen文件夾 只要把上面的「bin」改成「gen」便可
4.把這倆文件夾移除版本管理,可是 又有問題了,就是
在你執行 「git status」查看當前狀態,會發現 gen和bin文件夾下的文件會出現,提示沒有在版本管理裏面
這就很煩人,咱們既想把gen和bin移除版本管理庫,
可是這樣的提示,會耽誤咱們的「git add」命令,也會干擾咱們使用「git status」的結果列表
咱們想忽略這倆文件夾,
我參考了下面的鏈接
http://stackoverflow.com/questions/3325736/eclipse-android-and-gitignore
咱們能夠在與 「.git」文件夾同級目錄下 創建「.gitignore」文件,就是這倆文件在同一個目錄下
「.gitignore」文件裏面的內容就是 咱們要忽略的文件,這些文件即便不在版本管理庫,也不會提示的
文件內容以下:# built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties
# Eclipse project files
#.classpath
#.project
# Proguard folder generated by Eclipse
proguard/
# Intellij project files
*.iml
*.ipr
*.iws
.idea/
上面這些文件就被忽略。
原文是刪除了「.classpath」和「.project」,我不建議這樣作,這兩個文件仍是留在版本管理庫,不然,你把項目導出到別的地方,再導入時就會有問題。
記得
參考以下:\******************開始***************\
通常咱們總會有些文件無需歸入 Git 的管理,也不但願它們總出如今未跟蹤文件列表。 一般都是些自動生成的文件,像是日誌或者編譯過程當中建立的等等。咱們能夠建立一個名爲 .gitignore 的文件,列出要忽略的文件模式,來看一個簡單的例子:
$ cat .gitignore *.[oa]
*~
第一行告訴 Git 忽略全部以 .o 或 .a 結尾的文件。通常這類對象文件和存檔文件都是 編譯過程當中出現的,咱們用不着跟蹤它們的版本。第二行告訴 Git 忽略全部以波浪符(~) 結尾的文件,許多文本編輯軟件(好比 Emacs)都用這樣的文件名保存副本。此外,你可能 還須要忽略 log,tmp 或者 pid 目錄,以及自動生成的文檔等等。要養成一開始就設置好 .gitignore 文件的習慣,以避免未來誤提交這類無用的文件。
文件 .gitignore 的格式規範以下:
• 全部空行或者以註釋符號 # 開頭的行都會被 Git 忽略。
• 可使用標準的 glob 模式匹配。
• 匹配模式最後跟反斜槓(/)說明要忽略的是目錄。
• 要忽略指定模式之外的文件或目錄,能夠在模式前加上驚歎號(!)取反。
所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。星號(*)匹配零個或多個任 意字符;[abc] 匹配任何一個列在方括號中的字符(這個例子要麼匹配一個 a,要麼匹配一 個 b,要麼匹配一個 c);問號(?)只匹配一個任意字符;若是在方括號中使用短劃線分 隔兩個字符,表示全部在這兩個字符範圍內的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的數字)。
咱們再看一個 .gitignore 文件的例子:
# 此爲註釋 – 將被 Git 忽略
*.a # 忽略全部 .a 結尾的文件
!lib.a # 但 lib.a 除外
/TODO # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目錄下的全部文件
doc
若是作完上面的設置後,出現編譯錯誤,課按照下面的方法解決\******************結束***************\
With regards to the error, I would clean the project and/or try to run the Fix Project Properties utility (right-click on the Project -> Android Tools -> Fix Project Properties).
這裏推薦一個學習git 的入門帖子:寫的還不錯
http://www.nshen.net/sitelog/2011/08/03/git-note.htmlhtml