2017-04-17 32 views
0

我希望我的項目中的特定配置文件在本地環境中具有不同於config的環境,而且我不想更改或隱藏/每次我的東西推到主存儲庫是否git'skipworktree'阻止文件從git pull更新

時間,我發現,使用彈出文件:

git update-index --skip-worktree <file> 

讓我這樣做。

雖然我有一個問題,在其他人更改配置文件並將更改推送到主存儲庫的場景中,下次我將更改導入到本地配置文件時,會更新該配置文件嗎?

+0

它不,但[設置稀疏結帳呢](https://stackoverflow.com/a/37066742/2303202) – max630

回答

1

如果配置文件是沒用的,做版本控制(因爲你需要配置不同的地方),你最好忽略該文件中.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 
  • 的配置文件僅在局部改變,當你想結賬其他分支,git會顯示
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-worktreehere

+0

感謝您的詳細解答,這讓我感到困惑,因爲我曾經假設將文件標記爲skip-worktree會使其被git pull和branch checkout忽略。 如果是這種情況,我不明白git update-index的用途--skip-worktree – Snedden27

+0

Skip-worktree假裝它的工作目錄版本是最新的,而是讀取索引版本。但是當你使用'git pull'或'git checkout branch'時,當前的索引正試圖放棄,所以skip-worktree將停止工作。 –

0

這裏的文檔有點不清楚;在我的測試中(使用版本2.12.0.windows.1)如果遠程包含我標記爲--skip-worktree的文件的更改,則無法拉動。 (我得到了覆蓋本地修改的操作的常見錯誤,我嘗試了各種方法來解決這個問題,但唯一有效的方法是清除skip-worktree位,這當然會讓你回到保護當地的變化。)

我個人認爲這個解決方案非常混亂。 (a)特定於環境的設置不受源代碼控制(即存儲在.gitignore覆蓋的路徑或存儲在回購站之外的路徑),或者(b)您保留每個環境的文件版本而選擇「主動」的方式不受源控制。

+0

我不能gitignore該文件。 現在我正在存儲我的本地文件,所有的東西都拉出來,一旦拉出來就彈出存儲回來。但我希望我能以更簡單的方式做到這一點 – Snedden27

+0

好吧,如果您堅持依靠手動程序來避免提交您認爲是本地的更改,那麼只能是兩次失敗之間的時間問題。哦,但你足夠好,永遠不會犯錯誤?涼。是否每個人都與你一起工作(或永遠)?看,我不在乎你在回購中做了什麼,但是不要問一個問題,然後嗤之以鼻什麼是處理問題的正確方法。 (您是否注意到其他答案實際上給出了完全相同的建議?) –

相關問題