拆分git repo在一个被压扁的公共和初始私人

时间:2013-10-28 17:20:47

标签: git github merge

我想在Github上开源项目。
有很多提交(超过2k)我会压缩到一个“初始提交”,以便从一个干净的代码库开始并隐藏一些历史的东西。

问题是,是否有可能:

  • 保留一个私人仓库(其中将有一些秘密密钥,travis conf,......)以及所有初始提交
  • 有一个干净的公共代码库(所有提交压缩成一个)
  • 并且在公共回购中工作并在私人需要时“合并”而没有任何冲突?

感谢。

3 个答案:

答案 0 :(得分:3)

您可以在当前的回购中非常有效地执行此操作:

从:

开始
# ...---o---H    HEAD, master

git cat-file -p master \
| sed '1,/^$/d' \
| git commit-tree HEAD^{tree} \
| xargs git branch public

获取

# ...---o---H    HEAD, master
#
#           H'   public  <-- H's exact content and commit message, no history

然后,

git merge -s ours public

# ...---o---H---I    HEAD, master   <-- gives later merges an accurate base
#              /
#           H''   public

git remote add public -t public its://u/r/l   # <-- '-t public` sets default push
git push public

你已经完成了。

(编辑:添加了-t public安全游戏,因此你必须做一些明确的事情来推动非公开历史记录)

答案 1 :(得分:1)

  

有一个干净的公共代码库(所有提交压缩成一个)

只需删除当前的.git,git init,添加所有内容并提交:1提交“压缩”其他所有内容。

  

保留私人仓库

是的,您甚至可以使用Bitbucket等托管服务提供免费私人回购。

  

并处理公共回购并在私人需要时“合并”而没有任何冲突

如果您没有任何并发​​修改,并且合并应该是微不足道的或快进的 它将在私有仓库的本地克隆中完成,然后将其推送到其私有托管服务器。

答案 2 :(得分:1)

我建议创建一个新的公共git仓库并将所有相关文件复制到该新项目中(我们现在将其称为“PUBLIC”)。你最初的提交PUBLIC。这为您的公共回购提供了没有历史记录的起点。

有了这个,将来,您希望公开的所有提交都应该提交给PUBLIC。

您现有的私人仓库现在可以设置一个从PUBLIC获取的新远程。您想要进行的任何更改应该在公共仓库中进行,应该提交给PUBLIC,然后合并到您的私人仓库中。