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

Law*_*ren 12 git github

我正在处理的当前项目仅限于一个git存储库.我当前的工作目录看起来像这样:

dist/
  *distribution files

src/
  *src files
Run Code Online (Sandbox Code Playgroud)

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

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

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

Way*_*lan 15

git的子树命令为这个伟大工程.从你的master分支做:

git subtree split --branch deploy --prefix dist/
Run Code Online (Sandbox Code Playgroud)

只要每次要更新deploy分支时运行该命令.它会将dist子目录(当前分支中的每个提交- 可能master)合并到分支的根目录deploy并维护完整的提交历史记录.请注意,只会dist合并子目录中的更改.如果提交包括dist对repo中的subdir和其他文件的更改,则仅dist包括subdir中的更改.

棘手的部分是安装.据我了解,该命令包含在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
Run Code Online (Sandbox Code Playgroud)

一旦安装好,就可以按照文档中的说明用它做各种很酷的事情.

  • 有没有办法做同样的事情,但是当构建文件或`dist`在`.g​​itignore`并且不在master之外?为了澄清,我只想在deploy分支中使用dist文件,并且只想在master中使用src文件. (6认同)