Git:如何将子目录推送到同一存储库的单独分支

时间:2015-09-16 19:13:22

标签: git github

我正在处理的当前项目仅限于一个git存储库。 我当前的工作目录如下所示:

dist/
  *distribution files

src/
  *src files

我们设置了Azure服务器,以自动部署推送到我们仓库的“部署”分支的任何内容。因此,目标是将src文件推送到master并将dist文件夹的内容推送到'deploy'分支。

到目前为止,我一直在做的是分离master,删除src文件夹,并在推送部署之前将dist文件夹的内容移动到root。

我知道理想情况下我们会有单独的回购,但目前这不是一个选择。有更简单的方法吗?

1 个答案:

答案 0 :(得分:15)

git-subtree命令对此很有用。从您的master分支执行:

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

每次要更新deploy分支时,只需运行该命令。它会将dist子目录中的每个提交(当前分支 - 可能是master)合并到deploy分支的根目录,并维护完整的提交历史记录。请注意,只会合并dist子目录中的更改。如果提交包括对dist子目录和repo中其他文件的更改,则仅包括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中的说明使用它做各种很酷的事情。