gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:19:44 24 4
gpt4 key购买 nike

我有一个可以在其中使用的存储库。其中有一个文件夹,我在其中放置了所有要开源的内容,因此它与私有(private)部分是分开的。有没有一种方法可以使git自动将提交到该文件夹​​的任何内容推送到github存储库,而无需我每次都记得将新更改的文件推送到github存储库?我想将整个存储库推送到另一个github位置。

最佳答案

如果您有一个单一的存储库,其中零件打算是公开的,而零件则打算是私有(private)的,那么您需要从根本上更改存储库设置中的某些内容。 git跟踪完整的存储库,因此您可以将存储库设为公开或私有(private),但不能部分地将其设为部分或全部。

如果您既有包含“公共(public)”文件的存储库,也有包含“私有(private)”文件的存储库,则可以在“公共(public)”存储库中添加一个git钩子(Hook),以自动推送提交,并仅将私有(private)存储库保持私有(private)状态。

但是,您写的是,您有一个包含“public”和“private”文件的单个存储库,因此您需要以某种方式将其拆分为“public”和“private”文件。

您可以通过多种选择来解决这种情况:

  • 将“public”文件夹拆分到您自己的存储库中
    将推送到github。这将稍微重写“公共(public)”文件夹的历史记录。
    我将在下面更详细地概述这一点。
  • 创建只涉及“公共(public)”文件夹的分支,
    并且仅发布该分支。
    从“意外推送,即发布私有(private)内容”的意义上讲,这是冒险的,
    如果有的话,这是完全不可能的,或者至少很难做到的
    任何涉及“公共(public)”和“私有(private)”文件的提交,所以我会
    建议不要使用此选项,并且不会对此进行更多介绍。

  • 为了将“public”文件夹拆分成自己的存储库,请在“combined”分支上创建一个新的“public”分支,并在其上使用 git filter-branch 使新的“public”分支仅包含“public”文件夹中的内容。 “示例”部分仅显示正确的--subdirectory-filter示例)。然后,您将同时拥有带有“public”文件夹和私有(private)内容的旧“combined”分支,以及只有“public”文件夹的新“public”分支。

    请注意,例如新的“public”分支中的提交消息仍可能包含“private”信息。因此,您应该浏览所有提交消息,扫描它们以获取私有(private)信息,并可能删除该私有(private)信息,例如与 git rebase -i

    Update: [The subsequent push of only the "public" branch and nothing else will probably not transfer any other information, so this repo cleanup is probably not needed.] If you needed to do any redactions, you will want to remove the old unredacted revs from the repo using git gc (probably with the --prune=0 and --aggressive options - but I can't find the SO answer with more info about that).



    现在,您的“公共(public)”分支已准备好发布。为了确保它仅包含“公共(public)”信息,您可以将其推送到一个新的空本地裸仓库中,检查该内容以验证所有引用都没有私有(private)信息。满意后,您可以将“public”分支推送到github上的一个新的空存储库中。然后,github上的存储库将仅包含“public”分支,您可能应该在github存储库上将其命名为“master”。

    具有“combined”分支的本地存储库仍直接包含公共(public)和私有(private)信息,并且与新的“public” github存储库没有任何关系。

    现在,您可以重写“组合”分支的历史记录以仅包含非公共(public)位,但是这将牺牲所有历史记录中“公共(public)”和“私有(private)”文件状态之间的所有连接,因此可重复构建的旧文件将变得几乎不可能。因此,我建议不要将“组合”分支的历史记录留在原处,而只需在新提交中从其中删除“公共(public)”文件夹即可。

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

    如果私有(private)文件和公共(public)文件之间的集成比较松散,则您也可以将公共(public)文件视为任何外部第三方项目,并以任何其他人将其集成到私有(private)文件中的方式将其集成到私有(private)文件中,例如与外部文件中的任何外部文件一样。您的“私有(private)”软件所依赖的软件。

    关于git - 自动将更改推送到git存储库中的一个文件夹到github?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2254687/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com