我正在处理的当前项目仅限于一个git存储库。 我当前的工作目录如下所示:
dist/
*distribution files
src/
*src files
我们设置了Azure服务器,以自动部署推送到我们仓库的“部署”分支的任何内容。因此,目标是将src文件推送到master并将dist文件夹的内容推送到'deploy'分支。
到目前为止,我一直在做的是分离master,删除src文件夹,并在推送部署之前将dist文件夹的内容移动到root。
我知道理想情况下我们会有单独的回购,但目前这不是一个选择。有更简单的方法吗?
答案 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中的说明使用它做各种很酷的事情。