git ignore(詳解)


git ignore

規則很簡單,不做過多解釋,但是有時候在項目開發過程中,突然心血來潮想把某些目錄或文件加入忽略規則,按照上述方法定義后發現並未生效,原因是.gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。那么解決方法就是先把本地緩存刪除(改變成未track狀態),然后再提交:

當我們需要刪除暫存區分支上的文件, 同時工作區也不需要這個文件了, 可以使用(沒啥用)

1 git rm file_path
2 git commit -m 'delete somefile'
3 git push

當我們需要刪除暫存區分支上的文件, 但本地又需要使用, 只是不希望這個文件被版本控制, 可以使用(有用)

核心原理:也是提交了一個刪除該文件的記錄,但是本地文件不受影響,但是如果提交到了遠程上遠程分支就會刪除這個文件,其他分支pull了之后都會跟着刪除。

git rm --cached file_path
git commit -m 'delete remote somefile'
git push

所以如果你的需求是某個文件互不影響,那么就要參考以下的做法了,非常危險以及麻煩。

比如你的需求是(從這開始看)

1 本地dev有個wsgi.py

2 本地master有個wsgi.py

3 git遠程倉庫dev有個wsgi.py

4 git遠程倉庫master有個wsgi.py

5 線上遠程master有個wsgi.py

6 如果想讓彼此的wsgi.py互不影響,但是此時wsgi.py已經被git追蹤了,所以再設置.ignore已經無效了。

這個時候,首先你要保證每個倉庫都版本一致。然后從你線上的分支開始

一 線上遠程master

1 git rm --cached Yanapi/wsgi.py

2 vim .gitignore 添加上wsgi行

3 git add .

4 git commit -m '線上清除wsgi緩存'

5 git pull origin master #ps:這里可能要解決下沖突

6 git push origin master

二 本地master

1 git rm --cached Yanapi/wsgi.py

2 vim .gitignore 添加上wsgi行

3 git add .

4 git commit -m '本地清除wsgi git追蹤'

5 git pull origin master #ps:這里可能要解決下沖突

7 git push origin master

三 本地dev

1 git rm --cached Yanapi/wsgi.py

2 vim .gitignore 添加上wsgi行

3 git add .

4 git commit -m '本地清除wsgi git追蹤'

5 git checkout dev

5 git merge master #ps:這里可能要解決下沖突

7 git push origin dev

四 本地master

git checkout master

git merge dev #ps:這里可能要解決下沖突

git pull origin master

git push origin master

五 遠程master

git pull origin master

核心原理:

大前提:git如果已經追蹤了wsgi.py所以.gitignore已經無效了

上面這么做的核心原理就是:

1 我的a庫清除wsgi.py緩存記錄git會提交一個delete wsgi的操作,a庫本地wsgi.py保存住了,a庫ignore wsgi.py也會生效。

2 b庫想合並a庫,這個時候b庫先把自己wsgi.py的緩存清理掉,並且.ignore忽略wsgi.py然后提交版本,這個時候再合並a庫,a庫的delete那條記錄操作一瞅你的版本記錄里面已經有刪除wsgi.py了,那么b庫本地的wsgi.py就保存住了。

c庫合並b庫的原理也一樣。d庫合並c倉庫的原理也一樣,那么所有庫本地的wsgi都保住了,並且胡不影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM