2015-10-16 60 views
19

我們使用子樹部署來部署Yeoman項目的子目錄。在我們的案例中,該分公司被稱爲生產,而不是gh-頁如何強制子樹推覆蓋遠程更改?

這完美地工作,直到昨天,當Git的服務器拒絕了命令git subtree push --prefix dist origin production,說

! [rejected]  9fe1683aa574eae33ee6754aad702488e0bd37df -> production (non-fast-forward) 
error: failed to push some refs to '[email protected]:web-and-new-media/graduation2015.git' 
hint: Updates were rejected because a pushed branch tip is behind its remote 
hint: counterpart. 

如果我切換到生產分支機構本地(這是乾淨的),git pull返回Your branch is up-to-date with 'origin/production'.即使我使用--rebase選項。

我可以通過我們的Web UI在服務器上看到生產分支的內容,沒有什麼不應該出現,就像我期望的dist目錄的編譯輸出一樣。

爲此,我似乎應該安全地強制覆蓋這些文件,但是如何? git subtree push沒有--force選項。

+0

'git subtree split --prefix dist origin origin'命令也失敗:'致命的:模糊的參數'origin':未知的版本或路徑不在工作樹中。' – ele

+0

好吧,現在我真的難住了。我運行了'git subtree pull --prefix dist origin production',這確實給我留下了一個與我改變的代碼有關的合併衝突,所以我解決了這個問題並且再次運行'git subtree push --prefix dist origin origin production'。只能再次失敗,並再次出現相同的錯誤。 – ele

回答

30

訣竅是鏈上的子樹被分成了強制推送:

git push origin `git subtree split --prefix dist master`:production --force 

我得到這個從http://clontz.org/blog/2014/05/08/git-subtree-push-for-deployment/補充協議,究竟是誰引用堆棧溢出this答案。我之前已經瀏覽過這個,但是史蒂夫克朗茨的帖子讓我點擊了它。

+1

此解決方案因「致命:不明確的參數'publish-dev':未知版本或路徑不在工作樹中」而失敗。「 –

+0

更新後的鏈接http://clontz.org/blog/2014/05/08/git-subtree-push-for-deployment/ –

+0

有沒有人解決了致命的含糊不清的爭論問題? –