假设我有一个私有存储库和一个公共存储库。我使用我的私人存储库进行开发,并在重要步骤中进行提交,在其中保存所有源和二进制文件。保存二进制文件的原因是允许恢复以前提交的版本,而不必重建所有二进制文件。当我完成了一项功能的开发后,我将它推送到一个公共存储库,集成商可以访问该存储库,它接受我和其他开发人员的贡献,并集成所有这些。在提取所有贡献后,集成商总是重建二进制文件。因此,我不需要将二进制文件从我的私人存储库推送到公共存储库,也不需要他拉取它们。git 中有没有办法避免在这个工作流程中推送和拉取二进制文件?
5 回答
Fedora 项目所做的是有一个后备缓存,其中二进制文件被签入并由它们的校验和识别——如果您不需要二进制文件,只需忽略列出校验和和相应文件名的文件
一种方法是拥有两个存储库,即源存储库和二进制存储库。将源存储库克隆为二进制存储库的子模块,以便您可以将特定的源修订与二进制文件相关联。
您可以尝试在单独的目录中构建二进制文件。然后,您可以将 is 视为另一个本地存储库,并保持源存储库与二进制文件无关。将它们放在本地存储库中并避免将特定文件推送到远程存储库会破坏 DVCS 的目的。
简而言之,使用以下二进制文件命名目录:
.gitignore
我不认为你到底想要什么是可能的。您想要 2 个远程仓库,但将二进制文件推送到其中一个,而不是另一个。我认为如果不使用特殊命令(在提交时可以忽略 .gitignore 文件的选项)让 repo 推送二进制文件,这是不可能的。
查看 .gitignore 功能以忽略来自提交(并因此推送)的文件。但这并不是您想要的,因为它会阻止所有二进制文件被推送。
请注意将二进制文件签入 git,因为所有签出都会更新二进制文件的时间戳(它可能比项目中的其他文件更新,因此增量构建不会重建内容,因为许多工具使用文件时间戳来确定要重建的内容) .
你的问题是,为了推动任何事情,你必须提交它。但是两个 repos 都会看到他们共享和分发的分支的所有提交。
因此,您唯一的解决方法是在本地工作副本(以及您的私人仓库)中创建一个新分支,并且该分支将只提交二进制文件。但这对您来说是一项艰巨的工作和令人头疼的工作,需要整理和实施。
即你需要设置一个工作流将分支切换到这个仅二进制分支,然后搜索所有二进制文件,然后生成提交(可能忽略 .gitignore 或编辑),然后推送到私有仓库,然后撤消对仓库所做的任何更改(恢复旧的 .gitgnore 如果你编辑它),然后切换回只包含源代码的原始分支。
我的建议是重新考虑为什么需要推送二进制文件。您的项目重建需要几分钟/几小时吗?