我希望我的項目中的特定配置文件在本地環境中具有不同於config的環境,而且我不想更改或隱藏/每次我的東西推到主存儲庫是否git'skipworktree'阻止文件從git pull更新
時間,我發現,使用彈出文件:
git update-index --skip-worktree <file>
讓我這樣做。
雖然我有一個問題,在其他人更改配置文件並將更改推送到主存儲庫的場景中,下次我將更改導入到本地配置文件時,會更新該配置文件嗎?
我希望我的項目中的特定配置文件在本地環境中具有不同於config的環境,而且我不想更改或隱藏/每次我的東西推到主存儲庫是否git'skipworktree'阻止文件從git pull更新
時間,我發現,使用彈出文件:
git update-index --skip-worktree <file>
讓我這樣做。
雖然我有一個問題,在其他人更改配置文件並將更改推送到主存儲庫的場景中,下次我將更改導入到本地配置文件時,會更新該配置文件嗎?
如果配置文件是沒用的,做版本控制(因爲你需要配置不同的地方),你最好忽略該文件中.gitignore
:
touch .gitignore
echo <file> >> .gitignore
git rm <file> --cached
git add .
git commit -m 'message'
git push
之所以不如下使用git update-index --skip-worktree <file>
:
git pull
時,配置文件將更新爲遠程。git pull
,git會檢測到衝突和配置文件顯示錯誤爲:error: Your local changes to the following files would be overwritten by merge: file Please commit your changes or stash them before you merge. Aborting
error: Your local changes to the following files would be overwritten by checkout: file Please commit your changes or stash them before you switch branches. Aborting
git update-index --skip-worktree
通常用於臨時使用。您還可以比較使用git update-index --skip-worktree
here。
感謝您的詳細解答,這讓我感到困惑,因爲我曾經假設將文件標記爲skip-worktree會使其被git pull和branch checkout忽略。 如果是這種情況,我不明白git update-index的用途--skip-worktree – Snedden27
Skip-worktree假裝它的工作目錄版本是最新的,而是讀取索引版本。但是當你使用'git pull'或'git checkout branch'時,當前的索引正試圖放棄,所以skip-worktree將停止工作。 –
這裏的文檔有點不清楚;在我的測試中(使用版本2.12.0.windows.1)如果遠程包含我標記爲--skip-worktree
的文件的更改,則無法拉動。 (我得到了覆蓋本地修改的操作的常見錯誤,我嘗試了各種方法來解決這個問題,但唯一有效的方法是清除skip-worktree位,這當然會讓你回到保護當地的變化。)
我個人認爲這個解決方案非常混亂。 (a)特定於環境的設置不受源代碼控制(即存儲在.gitignore
覆蓋的路徑或存儲在回購站之外的路徑),或者(b)您保留每個環境的文件版本而選擇「主動」的方式不受源控制。
我不能gitignore該文件。 現在我正在存儲我的本地文件,所有的東西都拉出來,一旦拉出來就彈出存儲回來。但我希望我能以更簡單的方式做到這一點 – Snedden27
好吧,如果您堅持依靠手動程序來避免提交您認爲是本地的更改,那麼只能是兩次失敗之間的時間問題。哦,但你足夠好,永遠不會犯錯誤?涼。是否每個人都與你一起工作(或永遠)?看,我不在乎你在回購中做了什麼,但是不要問一個問題,然後嗤之以鼻什麼是處理問題的正確方法。 (您是否注意到其他答案實際上給出了完全相同的建議?) –
它不,但[設置稀疏結帳呢](https://stackoverflow.com/a/37066742/2303202) – max630