2016-02-29 62 views
5

在我的機器上,我已將--skip-worktree設置爲config/database.yml使用另一個分支中的--skip-worktree處理文件更改

git update-index --skip-worktree config/database.yml 

另一名開發者一直致力於和項目工作,同時合併到開發分支的變化config/database.yml

現在,當我做git pull origin develop,我得到

Andrews-Air:[project] agrimm$ git pull origin develop 
From bitbucket.org:[company]/[project] 
* branch   develop -> FETCH_HEAD 
Updating [SHA]..[Another SHA] 
error: Your local changes to the following files would be overwritten by merge: 
    config/database.yml 
Please, commit your changes or stash them before you can merge. 
Aborting 

我應該如何處理這樣的變化?我應該怎麼做

git update-index --no-skip-worktree config/database.yml 
git stash save "Save changes to config/database.yml" 
git pull origin develop 
git stash apply 
# Fix any conflicts 
git update-index --skip-worktree config/database.yml 

還是有沒有一個不太好的方法?

+0

不是100%肯定這件事,但我懷疑讓你的skip-worktree使用git會完成這項工作。 'printf'%s \ n''*''!config/database/yml'> .git/info/sparse-checkout; git config core.sparsecheckout true',因爲你已經有了skip-worktree,這應該足夠了。 – jthill

回答

2

這根本不是一種冒險的做法。這實際上正是你在這種情況下需要做的。讓我們一步一步瀏覽場景。 (因爲它是一個YML文件,因此做了一些假設。)

由於您所做的更改僅影響您的本地構建過程,並且不希望將這些更改意外推送給其他人並有可能潛在地忽略該文件影響他們,或者更糟糕的是生產。一個相當正常和良好的做法。

有時這些文件確實需要更改,因爲在這種情況下,所以更新後的版本會被提交。引入這些更改將觸發一個檢查來驗證它覆蓋的文件是否與提交中的文件匹配,如果不是,則會引發錯誤。 (未通過完整性檢查將忽略該標誌)

您正在主動忽略該文件,因此您需要告訴git再次關心它。否則,沒有git進程會看到該文件。

git update-index --no-skip-worktree config/database.yml 

然後把更改某個安全的地方,因爲你不想犯他們藏匿的最佳場所:

git stash save "Save changes to config/database.yml" 

你終於可以把從遠程更改到本地科。當你得到原始錯誤時,你已經提取了,所以你也可以只做合併。所以:

git pull origin develop 
-or- 
git merge origin/develop 

你是最新的了,但你仍然希望這些更新,使其在本地工作,所以讓我們找回他們從我們的安全的存放地點:

git stash pop 

如果有任何衝突,您都可以解決它們,並確保在整合新的更改後,您的項目將正確構建。

最後,我們希望再次保護其他用戶免受本地更改,因此我們恢復路徑上的skip-worktree標誌。

git update-index --skip-worktree config/database.yml 

我們完成了。

相關問題