请问,可以在开发git存储库中创建一个独立的分支,它只包含一个没有回归测试的特定文件,例如?怎么样?
例如,我想创建仅包含perl命令的分支,并将其推送到/usr/local/bin
中的git存储库。与主分支的合并将有部署(更改和发布)历史记录,但没有测试开发历史等。
我看了Git: Transfer Specific Files and Histories From One Repository to Another,但我不想用filter-branch
创建一个全新的回购。我更愿意只创建一个包含整个历史记录但已剥离到特定文件的发布分支。请说git log --file
和git filter-branch
的组合。
答案 0 :(得分:1)
发布管理应与开发分开。
您不需要调整回购的历史记录来表示“包”(要在目标环境中部署的文件集)。
您应该将您的仓库推送到服务器(目标环境)上的 bare repo ,并让post-receive hook负责部署(将正确文件的副本复制到{ {1}})
答案 1 :(得分:1)
我找到了原始问题的技术解决方案,但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
是否有更优雅的技术解决方案?