我有一个代码库,其中有一个文件夹用于存放我想要开源的内容,以便与私有部分区分开来。是否有一种方法可以让git自动将提交到该文件夹的任何内容推送到github存储库,而无需每次都记得推送新更改的文件?我想将整个代码库推送到另一个github位置。
我有一个代码库,其中有一个文件夹用于存放我想要开源的内容,以便与私有部分区分开来。是否有一种方法可以让git自动将提交到该文件夹的任何内容推送到github存储库,而无需每次都记得推送新更改的文件?我想将整个代码库推送到另一个github位置。
将“public”文件夹拆分为自己的存储库,您将推送到github。这将稍微重写“public”文件夹的历史记录。我将在下面更详细地概述此内容。
创建一个仅涉及“public”文件夹的分支,并仅发布该分支。从“意外推送”,即发布私人内容的角度来看,这是有风险的,如果您有任何同时涉及“public”和“private”文件的提交,则无法实现或至少非常困难,因此我建议不要选择此选项,并且不会再写更多内容。
要将“public”文件夹拆分为自己的存储库,请从“combined”分支创建一个新的“public”分支,并在其上使用git filter-branch
,使新的“public”分支仅包含来自“public”文件夹的内容。“示例”部分显示了恰当的--subdirectory-filter示例)。然后,您将拥有旧的“combined”分支,其中包含“public”文件夹和私人内容,以及仅包含“public”文件夹的新“public”分支。
git rebase -i
}}删除该私有信息。
现在您的“public”分支已准备好发布。为确保它仅包含“public”信息,您可以将其推送到一个新的空本地裸库中,检查该内容以验证所有引用均不包含私人信息。满意后,您可以将“public”分支推送到github上的一个新的空仓库中。然后,github上的仓库将仅包含“public”分支,您应该在github仓库上将其命名为“master”。更新: [仅推送“公共”分支而不是其他任何内容可能不会传输任何其他信息,因此可能不需要清理此仓库。] 如果您需要进行任何删除操作,则需要使用{{link2:
git gc
}}从仓库中删除旧的未经编辑处理的版本(可能需要使用--prune=0
和--aggressive
选项-但我找不到更多关于此的SO答案)。
git submodule
将来自github的“public” repo的特定版本添加到你的私有repo中。一个新的子模块文件夹,其名称与以前的“public”文件夹相同,将最小化对你的私有内容的更改,因为所有“public”文件都将在它们的旧路径中。请注意,当有东西被推送到github时,子模块文件夹不会自动更新。你可以通过向本地子模块文件夹添加git hook来解决这个问题,在“combined” repo中更新子模块信息。使用 githook 在提交时进行推送。