将选择性文件从一个分支添加到另一个分支



在使用Javascript进行开发时,作为一种实践,我们将缩小的JS上传到服务器上,因此我想在我的主分支中只保留缩小的JS,同时我在本地(私有(分支上进行更改。有没有一种简单的方法可以将缩小的JS从本地分支合并到主分支?

Cherry Pick 提交不起作用,因为我不希望合并我的私有提交中的所有文件。此方法建议从一个分支中选取特定文件以在另一个分支中提交,我想知道是否有一种设置/替代方法来自动化此操作,即合并仅需要缩小的 js 文件 (*.min.js(?

听起来您的

文档根目录中有一个远程存储库,您正在推送该存储库并将其用作活动站点的部署机制。我想说,在文档根目录中有一个 git 存储库并不是部署的好方法。(任何人都可以克隆你的整个存储库,包括你的整个提交历史记录和可能令人尴尬的未发布的代码。也许你的设置方式不同,但我会根据你写的内容进行这个假设。

相反,如果您使用接收后钩子将master提取到文档根目录,但让您的 git 存储库存在于其他地方,那么您可以毫无顾虑地存储缩小和非缩小的 JS 源代码。

将 git 存储库移出暂存服务器上的文档根目录。

在暂存 Web 服务器上的.git/hooks/post-receive中:

#!/bin/sh
GIT_WORK_TREE=/path/to/your/docroot git archive master --format tar | tar -x "*.min.js"

这将导致gitmaster分支的干净副本导出到您选择的目录中。它将通过管道来做到这一点 tar ,您可以使用它来准确过滤您想要去的文件和您不想去的文件。 post-receive 是一个 shell 脚本,因此您可以在这里真正疯狂,添加后续行以在部署后执行您想要的任何内务处理。

所以,以上是我建议你做的。如果您仍然想继续并在主分支中仅保留文件子集,则可以使用在 shell 脚本中链接到的方法。

假设您的本地分支名称是 local ,并且您想要"部署"到master的所有内容都已提交,请创建一个deploy.sh(如果需要,可以将其添加到.gitignore(:

#!/bin/sh
git checkout master
git diff-tree --name-only -r local | grep ".min.js$" > temp_file_list.txt
git checkout local `sed 'N;s/n/ /' temp_file_list.txt`
git commit -m "Selective 'merge' of minified js from my local branch"

然后,只要您想使用更改的 .min.js 文件更新 master,您只需运行 deploy.sh。如果您使用的是Windows并将本地文件保留为DOS格式,则应将rn而不是仅n放在上面的sed命令中 - 并安装基于bash的命令行git工具。

最新更新