我有以下用例:
我们有一个私有gitlab
存储库,并希望推送到公共存储库以将其github
开源。但是私有存储库和公共存储库应包含某些文件的不同版本。例如不同的文档等...
我试图将 opensource_branch 从私有gitlab
仓库推送到公共github
仓库:
git push origin_github opensource_branch:master
但结果是之前所有其他历史提交也被推送(其中包含不应公开的文档)。
任何想法如何在没有手动复制和粘贴的情况下解决这个问题?
谢谢。
PS:我当然已经搜索过类似的用例,但没有找到这个。关于推送到其他遥控器的所有其他问题都没有要求特定的历史提交在遥控器上根本不可见。
Git 基于哈希。这意味着完整性与每次提交一起保留。
一个提交与其父项相关联,这就是为什么你经常看到 Git 日志图表的箭头指向前一个提交(这看起来不直观)。在您的情况下,您可能有这样的历史:
$ git log --graph --oneline
* f329c58 Fix (HEAD -> master)
* 9d13dc2 Another fix
* 5641ac5 Spelling
* 978e43c Remove private documentation
* 4837aab Fix code
...
* 1bcd23a Initial commit
您要推送到远程存储库的内容仅来自978e43c
. 不幸的是,这个提交有一个父项是4837aab
. 您不能隐藏它,也不能告诉 Git 之前不要推送所有历史记录。
一种解决方案是使提交978e43c
成为孤儿,换句话说:没有父级。
git checkout --orphan public
git rm -rf . # Clear the working directory
git commit --allow-empty -m "Initial commit"
git rebase master..978e43c
然后您将拥有一个全新的分支,其中不包含您的私人文档。
此解决方案有效,但有几个缺点:
git filter-branch
您可以简单地从整个历史记录中删除您的敏感文档:
export PRIVATE ./documentation/private-api
git filter-branch -f \
--prune-empty \
--tag-name-filter cat \
--tree-filter 'rm -rf $PRIVATE' \
-- --all
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句