Git 管理項目
1、Git 如何管理項目的配置文件
在項目中時常會有一些配置文件,這些配置文件必須存在于項目當(dāng)中但各個成員之間并不需要保持一致。而且因為大家的運行環(huán)境不同等原因,大家都需要對其進(jìn)行修改,但不應(yīng)該將這些配置文件提交上去,因為這會影響到別人。
比如一個項目中的 .classPath 文件,每個人的項目中都必須要有這么一個文件才能運行,而每個人的 classpath 文件內(nèi)容都不需要保持一致,如果成員將自己本地的 .classPath 文件提交上去將會對別人造成不便。此時我們應(yīng)該如何管理這些配置文件呢?
如果直接在 .gitignore 文件中設(shè)置忽略這些文件,那么一開始就不能將這些配置文件提交至遠(yuǎn)程倉庫,因為 .gitignore 不能忽略已經(jīng)被追蹤(track)過的文件,這樣的話每個人克隆項目后都需要新建配置文件。如果不設(shè)置忽略,那么每個人都可能會將自己本地的配置文件修改提交上去,這可能會導(dǎo)致沖突,并且其他人根本就不需要獲知你的配置文件修改,而你將修改提交上去將會對別人有害而無益。
解決方法有下面兩種:
1.1、各自設(shè)置忽略配置文件的修改
這種方法是遠(yuǎn)程倉庫中配置文件已經(jīng)存在,每個人克隆項目時本地都會有配置文件并且都會對其進(jìn)行修改。此時如果我們直接在 .gitigore 文件中設(shè)置忽略該配置文件的話是沒有效果的。因為 .gitignore 只能忽略那些原來沒有被追蹤(track)過的文件,如果該文件之前已經(jīng)被納入了版本管理中,則修改 .gitignore 對其不生效。Git 之前已經(jīng)添加到了版本庫中的文件,即使后面再在 .gitignore 文件中添加忽略該文件,在本地中對該文件進(jìn)行修改仍會看到修改狀態(tài),并且會提交上去。
這時我們可以通過 git 命令來設(shè)置忽略該文件的提交,也就是忽略該文件在本地的修改。
可以使用以下命令來忽略該文件的本地修改。
git update-index --skip-worktree PATH //在PATH處輸入文件目錄
使用這個命令,時間久了,可能會忘記自己忽略過哪些文件,這時候可以使用` git ls-files -v . | grep "^S" `命令找出來忽略過的文件。
git ls-files -v . | grep "^S" //使用這個命令找出之前設(shè)置過忽略的文件
不想繼續(xù)忽略該文件時,使用` git update-index --no-skip-worktree `命令,來讓git不再忽略該文件。
git update-index --no-skip-worktree PATH //設(shè)置不再忽略

在上圖中,我將 mockJson.js 文件設(shè)置了忽略本地修改,此時可以查看到該文件在忽略列表里,并且在設(shè)置之后查看狀態(tài)就不會看到該文件的修改狀態(tài)。該文件的本地修改仍會保存,但是并不會提交到版本中。
或者使用下面的命令也可以設(shè)置忽略
git update-index --assume-unchanged PATH 在PATH處輸入要忽略的文件。
可參考:https://blog.csdn.net/xingchenxuanfeng/article/details/97629740、http://www.rzrgm.cn/wtil/p/11676092.html
缺點:使用這種方法管理項目的配置文件會需要所有人都主動設(shè)置忽略配置文件的提交,并且如果有某個人沒有設(shè)置忽略,并且將他在本地的修改提交了上去,在你拉取代碼時就會提示:Your local changes to the following files would be overwritten by merge: xxx.xxx。

這時候你可能就需要先取消對該配置文件的忽略,然后暫存、提交,再拉取、解決沖突,在解決完后你仍然不應(yīng)該將配置文件推送,所以你應(yīng)該再次設(shè)置忽略,比較繁瑣。
1.2、建立模擬的通用配置文件(常用方法)
Git 對于配置文件的管理,通常都會把一個通用的模擬配置文件(比如后面加個 .dist 或者 .bak 之類的后綴,這些文件對項目本身并不會有影響)作為備份放在遠(yuǎn)程倉庫中,每個人都會將這個模擬的配置文件克隆下來,并且可以基于這個模擬的配置文件來生成一個真實的配置文件。在 .gitignore 文件中我們需要設(shè)置忽略真實的配置文件,這樣每個人都可以在本地對這個真實的配置文件進(jìn)行修改,但并不會提交,所以對其他人不會造成影響,這也是 git 對于項目的配置文件比較通用的管理方式。
實例:
假設(shè) local.js 是項目運行所需要的一個配置文件,每個人都可以對其進(jìn)行修改并且無需保持一致。此時我們可以建立一個 local.default.js 文件放在遠(yuǎn)程倉庫中,然后在 .gitignore 文件中設(shè)置忽略 local.js 文件。local.default.js 文件的內(nèi)容是 local.js 中各自比較通用的內(nèi)容,每個人都可以基于這些內(nèi)容來編輯各自的 local.js 文件。每個開發(fā)者在拉取項目后都需要在本地手動建立 local.js 文件來保證項目的正常運行,不過因為 .gitignore 文件已經(jīng)設(shè)置了忽略,所以不會將這個文件提交上去,也就不會對別人造成影響。

浙公網(wǎng)安備 33010602011771號