git-文件忽略

    在使用git進行版本管理時,有一些不須要提交到版本庫裏的文件和文件夾,或者在管理一個實際應用的開源項目的時候,不能夠把帶有數據庫信息的文件上傳到開源平臺當中,此時就須要讓git自動忽略掉一下文件。文件忽略有幾種方式:javascript

  1. 沒有被track的文件java

    咱們須要在項目的根目錄當中建立.gitignore文件。 .gitignore 的格式規範以下:git

    • 全部空行或者以註釋符號 # 開頭的行都會被 Git 忽略;
    • 匹配模式最後跟反斜槓(/)說明要忽略的是目錄;
    • 要忽略指定模式之外的文件或目錄,能夠在模式前加上驚歎號(!)取反;
    • 可使用標準的 glob 模式匹配; 

    所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式:正則表達式

    *星   匹配零個或多個任意字符;
    ?    只匹配一個任意字符;
    [abc] 匹配任何一個列在方括號中的字符(這個例子要麼匹配一個 a,要麼匹配一個 b,要麼匹配一個 c);
    [0-9] 表示匹配全部 0 到 9 的數字;
    *?    表明任意的一個字符
    **    表明任意數目的字符
    *{!ab}    必須不是此類型
    *{ab,bb,cx}    表明ab,bb,cx中任一類型便可
    *[ ^abc]    表明必須不是a,b,c中任一字符

    因爲git不會加入空目錄,因此下面作法會致使tmp不會存在shell

    tmp/*             //忽略tmp文件夾全部文件

    改下方法,在tmp下也加一個.gitignore,內容爲數據庫

    *
    !.gitignore

    注意:.gitignore只能忽略那些原來沒有被track的文件,若是某些文件已經被歸入了版本管理中,則修改.gitignore是無效的vim

  2. 另外 git 還提供了另外一種 exclude 的方式來作一樣的事情。不一樣的是 .gitignore 這個文件自己會提交到版本庫中去,用來保存的是公共的須要排除的文件。而 .git/info/exclude 這裏設置的則是你本身本地須要排除的文件,不會提交到版本庫,只對本地副本有效, 他不會影響到其餘人。服務器

    exclude 文件所在位置.git/info/exclude , 每一個項目下都有本身的exclude

    vim .git/info/exclude命令行

    全局ignore方法,惟一,本地全部git repo有效。~/.gitconfig/core.excludesfile
    1.帳戶文件夾下新建一個.gitignore_global文件
    2.直接修改.gitconfig的內容:版本控制

    [core]
    excludesfile = c:/Users/你的帳戶文件夾/.gitignore_global

    或者,在Git的命令行裏輸入:

    $ git config --global core.excludesfile ~/.gitignore_global

    注意:exclude 忽略的也是未tract的文件

  3. 文件已被track,即遠程倉庫中已經包含或者已經commit/add了,這時再在.gitignore中添加規則忽略已經沒法生效了,正確的作法是:

    首先,刪除暫存區或分支上的文件,`$ git rm --cached config.xml`
    
    而後,更新.gitignore文件忽略掉config.xml
    
    最後,`$ git commit -m ""`

      按照上面的方法,當你push以後,服務器的config.xml文件將被刪除。本地存在可以使用, 只是文件不被版本控制(若是沒有更新 .gitignore, 會提示有untrack文件)。有一點須要注意的,git rm --cached 不會刪除本地的物理文件;若是你真的是完全不想要了,你也能夠直接 rm+忽略+提交,即不要 --cached 參數。

  4. 只是想在本地忽略某文件的修改,可是服務器保存一份副本。 正確的作法是在每一個clone下來的倉庫中手動設置不要檢查特定文件的更改狀況。

    對於全部協同開發人員以及任何新加入的開發人員執行:

    $ git update-index --assume-unchanged FILE        在FILE處輸入要忽略的文件. 假設未更改

    查看忽略的文件列表

    $ git ls-files -v|grep h\ //  \後面有空格

    若是要還原的話,使用命令:

    $ git update-index --no-assume-unchanged FILE

        這樣就能夠在本地版本庫中忽略FILE文件的修改。可是,切記一點,這樣作必須保證協同開發的全部人都執行此命令,但凡是有一我的不執行,則FILE文件的更改等到commit和push的時候便會更新到服務器而致使不肯發生的情形出現。 親手實驗結果:若是本地執行假設未更改的命令,其餘人修改了文件並推送後,本地git pull提示:error: Your local changes to the following files would be overwritten by merge: FILE。git status,nothing to commit, working tree clean。若是沒有更改,能夠正常git pull合併,但會失去忽略狀態。

  5. .gitignore 還有個有意思的小功能

        一個空的 .gitignore 文件 能夠看成是一個 placeholder 。當你須要爲項目建立一個空的 log 目錄時, 這就變的頗有用。 你能夠建立一個 log 目錄 在裏面放置一個空的 .gitignore 文件。這樣當你 clone 這個 repo 的時候 git 會自動的建立好一個空的 log 目錄了。
相關文章
相關標籤/搜索