【发布时间】:2013-11-07 14:20:59
【问题描述】:
我想在 Github 上开源一个项目。
有很多提交(超过 2k)我会压缩成一个“初始提交”,以便从一个干净的代码库开始并隐藏一些历史内容。
问题是,是否有可能:
- 保留一个私有仓库(上面会有一些密钥、travis conf、...)以及所有初始提交
- 拥有干净的公共代码库(所有提交压缩为一个)
- 并在公共仓库上工作并在需要时在私有仓库上“合并”而不会产生任何冲突?
谢谢。
【问题讨论】:
我想在 Github 上开源一个项目。
有很多提交(超过 2k)我会压缩成一个“初始提交”,以便从一个干净的代码库开始并隐藏一些历史内容。
问题是,是否有可能:
谢谢。
【问题讨论】:
您可以在当前的 repo 中非常有效地做到这一点:
起点:
# ...---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安全游戏,所以你必须做一些明确的事情来推送非公开历史)
【讨论】:
有一个干净的公共代码库(所有提交压缩成一个)
只需删除当前的 .git、git init、添加所有内容并提交:1 提交“挤压”其他所有内容。
保留一个私人仓库
是的,您甚至拥有像 Bitbucket 这样的托管服务,提供免费的私人存储库。
在公共回购上工作,并在需要时在私人上“合并”,没有任何冲突
如果您没有任何并发修改,则合并应该是微不足道的或快进的。
它将在私有 repo 的本地克隆中完成,然后将其推送到其私有托管服务器。
【讨论】:
我建议创建一个新的公共 git 存储库并将所有相关文件复制到该新项目中(我们现在将其称为“PUBLIC”)。对 PUBLIC 进行初始提交。这为您的公共回购提供了没有历史记录的起点。
一旦你有了这个,在未来,你想要公开的所有提交都应该提交给 PUBLIC。
您现有的私人仓库现在可以设置一个从 PUBLIC 拉取的新遥控器。您想要进行的任何最终应在公共仓库中进行的更改都应提交给 PUBLIC,然后合并到您的私人仓库中。
【讨论】: