2015-09-16 101 views
8

我正在處理的當前項目僅限於一個git存儲庫。 我當前的工作目錄看起來是這樣的:Git:如何將子目錄推送到同一存儲庫的單獨分支

dist/ 
    *distribution files 

src/ 
    *src files 

我們有一個Azure的服務器設置爲自動部署任何東西推到我們回購的「部署」分支。所以我們的目標是推動src文件掌握和dist文件夾的內容到'deploy'分支。

到目前爲止,我一直在做的事情是在推送部署之前分支出master,刪除src文件夾,並將dist文件夾的內容移動到根目錄。

我知道理想情況下我們會有單獨的回購協議,但目前這不是一種選擇。有沒有更簡單的方法來做到這一點?

回答

8

git-subtree命令對此很有幫助。從您的master分支辦:該命令要更新deploy分支每次

git subtree split --branch deploy --prefix dist/ 

只要運行了。它會將dist子目錄(當前分支的大概master)中的每個提交合併到deploy分支的根目錄並保留完整的提交歷史記錄。請注意,只有dist子目錄中的更改纔會合併。如果提交包含對dist子目錄和回購中的其他文件的更改,則僅包含dist子目錄中的更改。

棘手的部分是安裝。據我瞭解,該命令包含在git 1.7.11及更高版本中。但是,它位於「contrib」子樹中,因此它不是默認安裝的。在系統的軟件包管理器中搜索「git-subtree」,並在軟件包存在的情況下安裝它。如果沒有,或者如果你使用的是舊版本的git,我發現的最簡單的方法是從作者的repo安裝git-subtree。

git clone https://github.com/apenwarr/git-subtree.git 
cd git-subtree/ 
make install 

一旦你安裝它,您可以在docs解釋做各種很酷的事情吧。

+0

完美工作。謝了哥們。 – Lawren

+2

有沒有辦法做同樣的事情,但是當構建文件或'dist'在'.g​​itignore'中並且保持在master之外?爲了澄清,我只需要部署分支中的dist文件,並且只需要主服務器中的src文件。 – Lawren

相關問題