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都保住了,並且胡不影響。