目前正在开展一个项目。我们希望在过滤掉一些特定的私人文件夹时,使用完整信息(作者等等)开源我们的日常提交。
假设我在分支主服务器中提交了A / file1和B / file2,我希望将它镜像到GitHub上并过滤B文件夹(此提交只有A / file1)。
我想要这样做的一种方法是远程更新钩子:
理想情况下它可以双向进行(也就是说,如果我们还可以导入回github分支并拉取请求并将它们“重新定位”在我们的私有存储库之上,自动或使用简单的进程,那将是很好的 - 可能没那么难,因为它可能只是一个变种)。
这有点类似于git-subtree可以做的,除了它不是提取子目录而是过滤各种文件。
这看起来可行吗?还是其他任何建议? (可能基于git filter-branch?或任何其他可能对我有帮助的现有工具/脚本?)
注意:子模块不是一个可行的选项,因为它们可能很稀疏,而且会过多。此外,“私人”文件列表可能会随着时间的推移而延长/变化。
答案 0 :(得分:0)
您的计划没有问题,但应该使用git filter-branch
来重写提交。 filter-branch
命令是为这些目的而设计的,它为您提供了以您想要的任何方式重写提交的最大功能。
让您提供给filter-branch
的脚本记录从旧到新的提交映射非常容易。
尽管如此,即使你说子模块不是一个可行的选择,我认为使用"私有"顶级文件夹实际上是一个单独托管的git存储库,比你提议的历史重写更好。它不易出错,更容易实现,也更容易理解。
答案 1 :(得分:0)
我一直处于类似情况:
请改用BFG repo cleaner。它的 MUCH 更快更容易使用。
您需要定期修剪回购邮件中的所有提交,不要提及您的私人文件夹/文件。
拥有完整的回购 AND OSS。让你的脚本将文件从一个文件传输到另一个文件,并对OSS进行特殊测试,这样你就可以找到你不应该的东西。
两个存储库都应该位于您的网络中,最好是在同一台计算机上(安全性)。 OSS repo中只允许,检查和清除分支离开机器(推送到GitHub或任何地方)。
使用子模块/子树进行POC,看看它们是否比脚本更好地工作。你会浪费额外的2个小时并确定无疑。我认为他们可能是可行的选择,因为你们有私人文件夹...
您可以使用.git/info/exclude
排除OSS回购中的私人文件和文件夹,这样即使Git注意也不会故意避免有关它们的信息泄露。
在您通常的回购中,您可以将这些文件添加到.gitignore,在一个分支上,作为初始过滤器,稍后用于提供OSS回购。