是否有一种规范的方法可以追溯性地将git回购拆分为公共和私人变体?
我有一个git存储库,其中包含一些敏感数据,这些敏感数据可能是硬编码的,也可能是正式硬编码的,现在位于git历史中的某些点上 为了使该项目公开,以便具有类似兴趣的编程人员能够从中受益并贡献更改,我想用叉子清理这些有问题的文件 我考虑的程序如下:是否有一种规范的方法可以追溯性地将git回购拆分为公共和私人变体?,git,publishing,privacy,computer-forensics,git-reflog,Git,Publishing,Privacy,Computer Forensics,Git Reflog,我有一个git存储库,其中包含一些敏感数据,这些敏感数据可能是硬编码的,也可能是正式硬编码的,现在位于git历史中的某些点上 为了使该项目公开,以便具有类似兴趣的编程人员能够从中受益并贡献更改,我想用叉子清理这些有问题的文件 我考虑的程序如下: 浅层/共享将repo本地克隆到新的本地位置,此文件夹将成为公共变体。后续步骤在新回购协议中 将主机分支到分支公共主机 删除所有其他分支参照 清理public master 挤压public master git reflog expire--expire
公共主机
public master
public master
git reflog expire--expire unreachable=now--all&&git gc--prune=all--agressive
remove all unreachable ref,它现在是任何不在公共分支中的对象git push
将公共主机添加回私有存储库的上游master
。推到原点obj
唯一的问题是,我希望能够从私人回购中撤出,这样他们就有了非共享的历史
这似乎是不可避免的,因为您已经更改了分支历史并将其压扁
不是简单地从新的公开回购中撤出,而是简单地考虑新的回购计划中的一个变更,并决定我要向旧的私人回购的地方克隆添加哪一个:< /P>
# update local content of new repo
cd /path/to/public/repo
git pull
# check what needs to be added
cd /path/to/clone/of/old/repo
git --work-tree=/path/to/public/repo add -p .
你会看到新旧之间的差异,这是由于公共回购协议可能发生的新变化
唯一的问题是,我希望能够从私人回购中撤出,这样他们就有了非共享的历史
这似乎是不可避免的,因为您已经更改了分支历史并将其压扁
不是简单地从新的公开回购中撤出,而是简单地考虑新的回购计划中的一个变更,并决定我要向旧的私人回购的地方克隆添加哪一个:< /P>
# update local content of new repo
cd /path/to/public/repo
git pull
# check what needs to be added
cd /path/to/clone/of/old/repo
git --work-tree=/path/to/public/repo add -p .
您将看到新旧之间的差异,这来自于公共回购协议上可能出现的新变化。结合@VonC和@b-fg答案,我认为最明智的解决方案如下。 请注意,很容易用可能包含敏感日期的OBJ污染新的公共存储库,而是构建一个新的公共存储库
public
public
git--work tree=/path/to/private add-p。
导致git使用公共索引运行,但使用私有的净化工作树。public repo现在已将经过清理的分支的所有工作树分段,因此git commit
git reset--hard
private/public
和public/master
现在是不相交的。所以我们需要把它们嫁接在一起。使用git branch-u public master
设置private/public
的上游git pull-允许不相关的历史
git remote Set url public--push“此分支是只读的”
现在只需在公共存储库中创建新功能,并根据需要将它们拉回到私有存储库中。结合@VonC和@b-fg答案,我认为最明智的解决方案如下。 请注意,很容易用可能包含敏感日期的OBJ污染新的公共存储库,而是构建一个新的公共存储库
public
public
git--work tree=/path/to/private add-p。
导致git使用公共索引运行,但使用私有的净化工作树。public repo现在已将经过清理的分支的所有工作树分段,因此git commit
git reset--hard
private/public
和public/master
现在是不相交的。所以我们需要把它们嫁接在一起。使用git branch-u public master
设置private/public
的上游git pull-允许不相关的历史
git remote Set url public--push“此分支