我有这么一个需求,已有一个项目已经搞了一年多了
我现在想把这个项目开源,发布到 github 上,但是我不想把以前的 git 提交记录让别人看到,只想看到从今天之后的 commit
有办法限制吗?
比如我现在的代码在自建的 gitlab,想发布一份到 github,但是 github 上的,我只希望被人看到的 git log 只是从今天开始的,以往的看不到
我有这么一个需求,已有一个项目已经搞了一年多了
我现在想把这个项目开源,发布到 github 上,但是我不想把以前的 git 提交记录让别人看到,只想看到从今天之后的 commit
有办法限制吗?
比如我现在的代码在自建的 gitlab,想发布一份到 github,但是 github 上的,我只希望被人看到的 git log 只是从今天开始的,以往的看不到
复制到另一个文件夹,然后删掉 .git
,重新 git init
,再提交即可。
不过这样一来,以后也都要手动复制代码,两份代码无法用 git 进行版本 diff。也无法正常的处理分支合并。
我不太建议这么做。开源不止是公开源代码,还要建立社区、编写文档、通过 issue 和 pr 解决大家的问题。你只是公开代码,还不公开全部,那又何必搞开源呢?
git checkout <xxx> --orphan
创建一个从零开始的分支,然后该怎么提交就怎么提交就可以了。
注意不要合并原来的分支,只要合并,之前的提交记录就会加进来。
有这么一种思路:直接清空一个分支的 commit,然后替代某一个现有分支,把这个分支提交到要开源的仓库中。
这个是用 master 分支做例子。
git checkout --orphan new_branch # 建立空白分支
git add -A # 所有文件添加<Add all the files>
git commit -am "Init Commit" # Commit the changes
git branch -D master # 删除本地旧分支
git branch -m master # 新建分支重命名
git push -f origin master # 强制提交到master分支对应的远程仓库
2 回答1.3k 阅读✓ 已解决
3 回答1.8k 阅读
2 回答1.2k 阅读
1 回答1.1k 阅读
1 回答1.1k 阅读✓ 已解决
2 回答958 阅读
771 阅读
我理解为你前面的 commit 比较凌乱、或者有某些敏感信息被误提交了,所以希望在开源时删掉这些“黑历史”,但是私有仓库里的 commit 记录还是希望保留的、而不是一并删除。是这个意思吧?
做不到。
或者说能做到(比如用
git filter-branch --commit-filter
),但这样日后两个仓库之间同步起来会非常麻烦。我建议你不要这么搞。你可以换种思路。比如你可以新建一个分支,然后
git rebase
抹掉前面的 commit。然后在 github 上 import 你的项目,把你想隐藏的分支从 github 上删掉。当你想要同步的时候,从开发分支 merge 到开源分支上再 push 即可。这样你可以在你的开发分支上随便“瞎搞”。很多商业公司主导的开源项目都是这么搞的,它们往往都是自己有内部的版本控制系统,在 github 上仅仅是一个托管的镜像副本。比如 chromium 就是这样,你只能在 github 上看到其中的部分分支,谷歌内部的开发分支你是看不到的。