Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在压缩的公共和初始私有市场中拆分git回购_Git_Github_Merge - Fatal编程技术网

在压缩的公共和初始私有市场中拆分git回购

在压缩的公共和初始私有市场中拆分git回购,git,github,merge,Git,Github,Merge,我想在Github上打开一个项目的源代码。 为了从一个干净的代码库开始并隐藏一些历史资料,我会将相当多的提交(超过2k)压缩成一个“初始提交” 问题是,是否有可能: 保留一个私有回购协议(其中会有一些密钥,travis conf,…)和所有初始提交 有一个干净的公共代码库(将所有提交压缩为一个) 并在需要时在私人市场上进行公共回购和“合并”,而不存在任何冲突 谢谢 有一个干净的公共代码库(将所有提交压缩为一个) 只需删除当前的.git、git init、添加所有内容并提交:1提交“挤压”所有

我想在Github上打开一个项目的源代码。
为了从一个干净的代码库开始并隐藏一些历史资料,我会将相当多的提交(超过2k)压缩成一个“初始提交”

问题是,是否有可能:

  • 保留一个私有回购协议(其中会有一些密钥,travis conf,…)和所有初始提交
  • 有一个干净的公共代码库(将所有提交压缩为一个)
  • 并在需要时在私人市场上进行公共回购和“合并”,而不存在任何冲突
谢谢

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

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

进行私人回购

是的,你甚至有托管服务,比如提供免费的私人回购

并在需要时在私人市场上进行公共回购和“合并”,无任何冲突

如果没有任何并发修改,则合并应该是简单的或快速的。

这将在私有repo的本地克隆中完成,然后将其推送到其私有托管服务器。

我建议创建一个新的公共git repo,并将所有相关文件复制到该新项目中(我们现在称之为“public”)。做你最初的公开承诺。这为您的公共回购提供了无历史记录的起点

一旦你做到了这一点,在未来,你想要公开的所有承诺都应该公开


您现有的私人回购现在可以建立一个新的远程从公共。您希望在公共回购中进行的任何更改都应提交给公共回购,然后合并到您的私人回购中。

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

从:

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

得到

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

#谢谢大家,这就是我想做的。但从公共回购到私人回购的拉/合并变化又如何呢?这种行为行得通吗?@Léo如果你的私人帐户和公共帐户从同一个提交开始是的:你可以为所有遗产提交声明一个孤立分支(),非常详细,比我的答案更完整+非常感谢你!经过一些测试,这是我尝试过的最好的策略。
# ...---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