将 git 分支推送到其他存储库

达科

我有以下用例:

我们有一个私有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 之前不要推送所有历史记录。

解决方案 1:基于孤立分支

一种解决方案是使提交978e43c成为孤儿,换句话说:没有父级。

git checkout --orphan public
git rm -rf . # Clear the working directory
git commit --allow-empty -m "Initial commit"
git rebase master..978e43c 

然后您将拥有一个全新的分支,其中不包含您的私人文档。

此解决方案有效,但有几个缺点:

解决方案 2:更改历史记录 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Git将标签推送到远程存储库?

将本地Git存储库推送到新的远程服务器,包括所有分支和标签

如何将新的本地分支推送到远程Git存储库并进行跟踪?

是否可以将git stash推送到远程存储库?

将现有的Git存储库推送到SVN

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

防止其他人强行推送到我的Git存储库

如何将更改推送到在我的存储库中提高了PR的其他人的远程分支机构?

Git-将子文件夹推送到其他存储库

将没有根的分支推送到新存储库

git push将完整且独立的分支推送到远程存储库

无法将提交推送到我的git存储库

无法将提交从本地分支推送到github存储库

将STS项目从本地存储库推送到其他用户创建的远程目录

使用PyGithub和Python将本地git存储库推送到用户的远程git存储库

仅将最近的历史推送到新的Git存储库

将所有本地分支推送到Git中的其他远程站点

Git:将本地文件推送到远程存储库中的其他文件名

添加分支后无法推送到Git存储库

Git-将当前的Heroku存储库推送到远程github存储库

如何将Git服务器存储库问题推送到Github存储库?

如何将文件推送到git存储库而不推送到Heroku?

是否可以将冲突的代码推送到git并让其他人解决它?

移动分支而不将其推送到git存储库?

将 Xcode 项目推送到 TFS Git 存储库

如何将本地git存储库推送到svn

将当前分支的更改推送到其他分支

我如何将提交推送到已经从本地存储库推送到 git 的 heroku?

将项目从默认分支推送到其他分支