2015-09-16 65 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

相关问题