2014-02-20 59 views
4

我有一個使用Vagrant爲WordPress項目構建虛擬服務器的git倉庫(僅限本地開發)。文件夾結構大致如下(針對問題的目的)。推送到git存儲庫的子文件夾上的遠程來源?

- Vagrantfile 
- puppet/ 
- wordpress/ 
    - {www public folder/root Wordpress files} 
- files/ 

現在,所有這些文件都在我的倉庫的根,我希望他們呆在那裏,所以如果我需要添加到流浪,他們將被加入到回購的任何更新。現在,我的主機可以通過使用git直接推送更新來允許我部署到分段和生產服務器。但是這些文件存儲在/ wordpress /中,並且其服務器上的原始文件是根目錄。理想情況下,我只想從/ wordpress /文件夾推送到遠程原點的根目錄。

我想將/ wordpress /文件夾移動到項目的根目錄,但所有的Vagrant文​​件都會被推送到生產服務器(除非有一種方法可以添加特定於遠程原點的.gitignore)。

我確信有幾種方法可以實現這一目標,我也研究過git子樹,但是對於這個特定的問題看起來有點矯枉過正。如果有人可以建議最好的解決方案,將不勝感激。

+0

可能想要查看git子模塊,如果wordpress代碼在另一個git存儲庫中,它可以作爲子模塊添加到您的項目中。 –

+0

如果您需要更詳細的答案或使用子模塊的幫助,請告訴我。 –

+0

感謝您的評論阿納斯。我試圖將這個項目保存在一個存儲庫中。我真的沒有看到只有另一個項目的流浪配置的整個存儲庫。有沒有辦法在同一個存儲庫中擁有這兩種方法。 – alexmcfarlane

回答

7

間接的,snotty的答案是,git不是一個部署工具。所以你應該使用phing或capistrano或螞蟻或傀儡或廚師或ansible或grunt或只寫一些bash腳本等。

簡短的回答是git-subtree split。我會去這個。

闡釋

子樹,更是讓子模塊,可能會造成混淆,如果你真的不知道發生了什麼事情。通常它們用於模塊化開發,作爲子模塊的替代方案。我不會去那,因爲那不是你將如何在這種情況下使用它。

出於您的目的,您將執行什麼稱爲subtree split來創建一個分支,其中包含只有您需要的目錄。 subtree split命令會查看所有存儲庫的歷史記錄,以提交影響給定目錄中的文件的提交,並將它們與不提供的更改分開。然後,您可以將這些提交(或其壓縮版本)提交到他們自己的分支。因此,當你簽出這個分支時,給定的目錄將位於根目錄,而沒有其他的。

螺母和螺栓

我要做出一些選擇,你在我的解釋,但你可以自由地改變這些。我正在指定deploy分支,並且我決定將您的子樹歷史壓縮爲單個提交,因爲您不應該使用該分支來進行任何開發。我還假設您的存儲庫名稱是來源。

git subtree split --prefix=wordpress --squash --branch deploy 
git push -f origin deploy:deploy 

通過與部署推動:部署符號,你不居然有籤部署分支(這可能需要一段時間才能做),以推動它。通過直接推送到遠程分支,您甚至可以避免創建分支。

git subtree push --prefix=wordpress --squash deploy master 

我建議使用這個最後的方法,因爲它避免了不小心做與壓扁樹分支東西。

但是,...對我來說樹行不通的,因爲XYZ

呀,樹分裂仍是參差不齊,有時。如果出於某種原因,子樹命令不適合你,那就行了。您可以使用較舊的,更令人困惑的git-filter-branch命令。有關該命令的完整說明,請參閱here

如果你堅持這個選擇,那麼..那太臭了。你可能最好使用子模塊(如果你現在可能要走的路),或者編寫一些bash腳本將文件複製到你本地的不同回購站並推送......或其他可怕的東西。

或者您可以使用真正的部署工具。

+1

謝謝@eddiemoya花時間回答這個問題,這是一個很大的幫助。 – alexmcfarlane

相關問題