当前位置: 首页 > 知识库问答 >
问题:

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

苏野
2023-06-29

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

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

有办法限制吗?


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

共有4个答案

阳昊
2023-06-29

有这么一种思路:直接清空一个分支的 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分支对应的远程仓库   
李言
2023-06-29

git checkout <xxx> --orphan

创建一个从零开始的分支,然后该怎么提交就怎么提交就可以了。

注意不要合并原来的分支,只要合并,之前的提交记录就会加进来。

毋修为
2023-06-29

复制到另一个文件夹,然后删掉 .git,重新 git init,再提交即可。

不过这样一来,以后也都要手动复制代码,两份代码无法用 git 进行版本 diff。也无法正常的处理分支合并。

我不太建议这么做。开源不止是公开源代码,还要建立社区、编写文档、通过 issue 和 pr 解决大家的问题。你只是公开代码,还不公开全部,那又何必搞开源呢?

傅献
2023-06-29

做不到。

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

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

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

 类似资料:
  • 我在我的存储库中做了一些工作,发现一个文件有本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做Git等效的 使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站 (

  • 我不能链接url超过2,所以我把我的照片贴到这个博客上。请在这里看到我的问题。http://blog.naver.com/mail1001/220650041897 我想知道如何使用Android OpenCV使白色部分的图像,这是白纸上的文字,透明。 我研究过通过url(我写在博客上)使黑色背景透明,我认为“阿尔法通道”与此有关。 我认为它将工作,因为我使阿尔法通道的部分,我想使透明的黑色和其他

  • 在北网的优化指南中,针对英特尔GPU的OpenCL开源实现 工作组大小应大于16,并且是16的倍数。 Gen上有两个可能的SIMD车道是8或16。为了不浪费SIMD车道,我们需要遵循这个规则。 英特尔处理器图形Gen7.5的计算架构中也提到: 对于Gen7。基于5个产品,每个EU有7个线程,总计28 KB的通用寄存器文件(GRF)。 。。。 在Gen7上。5计算架构,大多数SPMD编程模型都采用这

  • 我得到一个错误,当我试图部署一个未经修改的版本的最新的Git桶源heroku. ! 无法使用sbt生成应用程序 ! 推送被拒绝,未能编译Scala应用程序 git@heroku.com:xxxxxx.git![远程拒绝]主- 一切都在本地构建和运行,没有问题。http://gitbucket.herokuapp.com/有一个演示应用程序,所以我知道这是可能的。我怎样才能绕过这个错误? [编辑]我

  • 我没有找到获取原始请求体的方法,我需要计算MD5散列。调用资源方法时,()的输入流已经被使用,我无法再次读取它。 我尝试将方法签名更改为: 通过这种方式,我可以获得请求主体的原始字节,并且可以成功地计算MD5散列,但我不知道如何处理多部分请求(拆分部分,获取每个部分,等等)。我必须亲自处理原始请求吗?或者我可以让Jersey做这个肮脏的工作,为我提取S并让我以某种方式计算MD5哈希吗? 谢谢,

  • 本文向大家介绍如何利用FutureBuilder提高开发效率,包括了如何利用FutureBuilder提高开发效率的使用技巧和注意事项,需要的朋友参考一下 常见场景 展示请求按钮 用户点击按钮,显示loading 展示数据或者错误 抽象模式 展示请求按钮(初始状态) 用户点击按钮,显示loading(请求中状态) 展示数据或者错误 (结束状态(成功或失败)) 转换成程序语言 以上三种现实情况对应