參考文章:https://www.cnblogs.com/kevingrace/p/5690241.html
第一種方法:
.gitignore中已經標明忽略的文件目錄下的文件,git push的時候還會出現在push的目錄中,或者用git status查看狀態,想要忽略的文件還是顯示被追蹤狀態。
原因是因為在git忽略目錄中,新建的文件在git中會有緩存,如果某些文件已經被納入了版本管理中,就算是在.gitignore中已經聲明了忽略路徑也是不起作用的,
這時候我們就應該先把本地緩存刪除,然后再進行git的提交,這樣就不會出現忽略的文件了。
解決方法: git清除本地緩存(改變成未track狀態),然后再提交:
[root@kevin ~]
# git rm -r --cached .
[root@kevin ~]
# git add .
[root@kevin ~]
# git commit -m 'update .gitignore'
[root@kevin ~]
# git push -u origin master
需要特別注意的是:
1).gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。
2)想要.gitignore起作用,必須要在這些文件不在暫存區中才可以,.gitignore文件只是忽略沒有被staged(cached)文件,
對於已經被staged文件,加入ignore文件時一定要先從staged移除,才可以忽略。
第二種方法:(推薦)
在每個clone下來的倉庫中手動設置不要檢查特定文件的更改情況。
[root@kevin ~]
# git update-index --assume-unchanged PATH //在PATH處輸入要忽略的文件
在使用.gitignore文件后如何刪除遠程倉庫中以前上傳的此類文件而保留本地文件
在使用git和github的時候,之前沒有寫.gitignore文件,就上傳了一些沒有必要的文件,在添加了.gitignore文件后,就想刪除遠程倉庫中的文件卻想保存本地的文件。這時候不可以直接使用"git rm directory",這樣會刪除本地倉庫的文件。可以使用"git rm -r –cached directory"來刪除緩沖,然后進行"commit"和"push",這樣會發現遠程倉庫中的不必要文件就被刪除了,以后可以直接使用"git add -A"來添加修改的內容,上傳的文件就會受到.gitignore文件的內容約束。
額外說明:git庫所在的文件夾中的文件大致有4種狀態
Untracked:
未跟蹤, 此文件在文件夾中, 但並沒有加入到git庫, 不參與版本控制. 通過git add 狀態變為Staged.
Unmodify:
文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改,
而變為Modified. 如果使用git
rm
移出版本庫, 則成為Untracked文件
Modified:
文件已修改, 僅僅是修改, 並沒有進行其他的操作. 這個文件也有兩個去處, 通過git add可進入暫存staged狀態,
使用git checkout 則丟棄修改過, 返回到unmodify狀態, 這個git checkout即從庫中取出文件, 覆蓋當前修改
Staged:
暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變為一致, 文件為Unmodify狀態.
執行git reset HEAD filename取消暫存, 文件狀態為Modified
Git 狀態 untracked 和 not staged的區別
1)untrack 表示是新文件,沒有被add過,是為跟蹤的意思。
2)not staged 表示add過的文件,即跟蹤文件,再次修改沒有add,就是沒有暫存的意思