Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从git存储库中筛选特定文件以获得发布版本?_Git_Release Management - Fatal编程技术网

如何从git存储库中筛选特定文件以获得发布版本?

如何从git存储库中筛选特定文件以获得发布版本?,git,release-management,Git,Release Management,请注意,可以在开发git存储库中创建一个独立的分支,该分支只包含某个版本的特定文件,而不包含回归测试,例如。?怎么做 例如,我想创建这个只包含perl命令的分支,并将其推送到/usr/local/bin中的git存储库。与主分支合并后,部署将具有(更改和发布)历史记录,但没有测试开发等历史记录 我读过,但我不想用过滤器分支创建一个全新的回购协议。我更愿意只创建一个发布分支,包含整个历史记录,但剥离到特定文件。比如说,git log--file和git过滤器分支的组合发布管理应该与开发分开 开发

请注意,可以在开发git存储库中创建一个独立的分支,该分支只包含某个版本的特定文件,而不包含回归测试,例如。?怎么做

例如,我想创建这个只包含perl命令的分支,并将其推送到
/usr/local/bin
中的git存储库。与主分支合并后,部署将具有(更改和发布)历史记录,但没有测试开发等历史记录


我读过,但我不想用
过滤器分支创建一个全新的回购协议。我更愿意只创建一个发布分支,包含整个历史记录,但剥离到特定文件。比如说,
git log--file
git过滤器分支的组合

发布管理应该与开发分开

  • 开发是在您的版本控制工具(这里是git)中管理的,并带有其他文件(如测试文件)
  • release是一个过程,它接受一个包(在您的例子中,除了测试文件之外的所有文件)并部署它们(这里是简单的复制到/usr/local/bin)
您不需要调整repo的历史来表示“包”(要在目标环境中部署的一组文件)。
您应该将您的repo推送到服务器(目标环境)上的,并让a负责部署(将正确的文件拷贝到
/usr/local/bin

我找到了我最初问题的技术解决方案,但VonC关于发布管理的回答更正确

set -e
git filter-branch --prune-empty --index-filter '
  git ls-tree -z -r --name-only --full-tree $GIT_COMMIT \
  | grep -v "^\(some_file_regexp\|another_file_regexp\)$" \
  | xargs -0 -r git rm -q --cached -r --ignore-unmatch'
git checkout -b release
git checkout master
git reset --hard refs/original/refs/heads/master
rm -r .git/refs/original

有更优雅的技术解决方案吗?

谢谢。编译+构建是创建包的过程。这些包是否也应该在某些git repo中进行版本控制,还是简单地存档?在/usr/local/bin(like)中是否存在一些反对git回购的论点。因此,可以快速恢复部署。还是最好强制安装以前的软件包(或删除新软件包并安装以前的软件包)?您能否添加更多关于git最佳构建/发布/部署实践的链接?请参阅。“包是否也应该在某些git repo中进行版本控制,还是简单地存档?”不是在源代码管理系统中存档,而是在工件引用中存档(请参阅中的更多链接)。成功的Git分支模型是关于开发工作流程,而不是发布管理。如果你坚持调整历史记录,那么你的解决方案看起来不错+1.我在下面的评论中添加了一些关于开发和发布管理分离的链接。