代码之家  ›  专栏  ›  技术社区  ›  uliwitness

将对git存储库中一个文件夹的更改自动推送到github?

  •  5
  • uliwitness  · 技术社区  · 16 年前

    我有一个我工作的存储库。那里有一个文件夹,我把所有我想开源的东西都放在那里,所以它与私有部分是分开的。有没有一种方法可以让git自动将提交到该文件夹的任何内容推送到github存储库,而无需每次都将新更改的文件推送到那里?我想将整个存储库推送到另一个github位置。

    2 回复  |  直到 16 年前
        1
  •  8
  •   ndim    16 年前

    如果您有一个单独的存储库,其中部件是公共的,部件是私有的,那么您需要从根本上更改存储库设置中的某些内容。git跟踪完整的存储库,所以您可以将存储库设置为公共存储库或私有存储库,但不能一部分是这个,一部分是那个。

    但是,您正在编写一份包含“公共”和“私有”文件的回购协议,因此您需要以某种方式将其拆分为“公共”和“私有”文件。

    您有许多选项可以解决这种情况:

    1. 将“public”文件夹拆分为您自己的存储库 将推送到github。这将稍微重写“public”文件夹的历史记录。

    2. 创建一个只涉及“公共”文件夹的分支, 只发布该分支。 从“意外推送,即发布,私人物品”的角度来看,这是有风险的, 任何涉及“公共”和“私有”文件的提交,因此我会 建议不要使用此选项,并且不会对此进行详细说明。

    git filter-branch 使新的“public”分支只包含“public”文件夹中的内容。“示例”部分只显示了右边的--子目录过滤器(示例)。然后,您将拥有包含“公共”文件夹和其中的私有内容的旧“组合”分支,以及仅包含“公共”文件夹的新“公共”分支。

    git rebase -i .

    更新: [随后的推动 只有 “公共”分支和其他分支可能不会传输任何其他信息,因此可能不需要此回购清理。]如果需要进行任何修订,您将希望使用 git gc (可能是因为 --prune=0 --aggressive 选项-但我找不到更多关于这一点的答案)。

    您与“合并”分支机构的本地回购协议仍然直接包含公共和私人信息,并且与新的“公共”github回购协议没有任何联系。

    现在你 能够

    如果私有文件和公共文件之间的集成非常紧密且依赖于版本,则可以使用 git submodule 将github的“公共”回购的特定版本添加到您的私人回购中。一个名为“public”文件夹的新子模块文件夹将最小化对私有内容的更改,因为所有“public”文件都将位于其旧路径中。请注意,当某些内容被推送到github时,子模块文件夹不会自动更新。您可以通过在本地子模块文件夹中添加一个git钩子来解决这个问题,它将更新“组合”repo中的子模块信息。

    如果您的私有文件和公共文件之间的集成更为松散,您也可以像对待任何外部第三方项目一样对待公共文件,并以其他人集成它的方式将其集成到您的私有文件中,即像您的“私有”软件所依赖的任何外部软件一样。

        2
  •  0
  •   databyte    16 年前

    使用 githook 推动提交。