如何利用 git 如何部分开源?

我有这么一个需求,已有一个项目已经搞了一年多了

我现在想把这个项目开源,发布到 github 上,但是我不想把以前的 git 提交记录让别人看到,只想看到从今天之后的 commit

有办法限制吗?


比如我现在的代码在自建的 gitlab,想发布一份到 github,但是 github 上的,我只希望被人看到的 git log 只是从今天开始的,以往的看不到

阅读 2.7k
4 个回答

我理解为你前面的 commit 比较凌乱、或者有某些敏感信息被误提交了,所以希望在开源时删掉这些“黑历史”,但是私有仓库里的 commit 记录还是希望保留的、而不是一并删除。是这个意思吧?

做不到。

或者说能做到(比如用 git filter-branch --commit-filter),但这样日后两个仓库之间同步起来会非常麻烦。我建议你不要这么搞。

你可以换种思路。比如你可以新建一个分支,然后 git rebase 抹掉前面的 commit。然后在 github 上 import 你的项目,把你想隐藏的分支从 github 上删掉。当你想要同步的时候,从开发分支 merge 到开源分支上再 push 即可。这样你可以在你的开发分支上随便“瞎搞”。

很多商业公司主导的开源项目都是这么搞的,它们往往都是自己有内部的版本控制系统,在 github 上仅仅是一个托管的镜像副本。比如 chromium 就是这样,你只能在 github 上看到其中的部分分支,谷歌内部的开发分支你是看不到的。

复制到另一个文件夹,然后删掉 .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分支对应的远程仓库   
推荐问题
logo
Microsoft
子站问答
访问
宣传栏