当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《将git存储库中的一个文件夹自动推送到github?》经验,为你挑选了1个好方法。

我有一个我工作的存储库.那里有一个文件夹,我把所有想要开源的东西放在一起,所以它与私有部分分开.有没有办法自动获取git将任何提交到该文件夹​​的内容推送到github存储库,而不必每次都记得将新更改的文件推送到那里?我想将整个存储库推送到另一个github位置.



1> ndim..:

如果您有一个存储库,其中部件是公共的,而部件是私有的,那么您需要从根本上更改存储库设置中的某些内容.git跟踪完整的存储库,因此您既可以将存储库设置为公共存储库,也可以将其设置为私有存储库,

如果你有一个带有"public"文件的repo和一个带有"private"文件的repo,你可以在"public"repo中添加一个git钩子来自动推送提交,并保持私有repo私有.

但是,你写的是你有一个包含"公共"和"私人"文件的repo,所以你需要把它分成"公共"和某种"私有"的东西.

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

    将"public"文件夹拆分为自己的存储库,然后将其推送到github.这将重写"公共"文件夹的历史记录.我将在下面更详细地概述这一点.

    创建仅涉及"public"文件夹的分支,并仅发布该分支.这在"意外推送,即发布,隐私"的意义上是有风险的,如果你有任何触及"公共"和"私人"文件的提交,那么完全不可能或者至少很难做到,所以我建议不要这样做选项,并不会写更多关于它.

要将"public"文件夹拆分为自己的存储库,请在"组合"分支git filter-branch上创建一个新的"公共"分支,并使用它来使新的"public"分支仅包含"public"文件夹中的内容."示例"部分显示了正确的 - 子目录 - 过滤器示例).然后,您将拥有旧的"组合"分支,其中包含"public"文件夹和其中的私有内容,以及仅包含"public"文件夹的新"public"分支.

请注意,例如新"公共"分支中的提交消息仍可能包含"私有"信息.因此,您应该浏览所有提交消息,扫描它们以获取私人信息,并可能删除该私人信息,例如git rebase -i.

更新: [后续推送"公共"分支,没有其他任何东西可能不会传输任何其他信息,所以可能不需要这个repo清理.]如果你需要做任何修改,你会想要删除旧的未编辑使用git gc(可能使用--prune=0--aggressive选项 - 来回购使用回购- 但我找不到有关更多信息的SO答案).

现在,您的"公共"分支已准备好发布.为了确保它只包含"公共"信息,您可以将其推送到一个新的空本地裸仓库,检查其内容以验证所有引用没有私人信息.在您满意之后,您可以将"public"分支推送到github上的新空回购.然后github上的repo只包含"public"分支,你应该在github repo上命名为"master".

具有"组合"分支的本地仓库仍然直接包含公共和私人信息,并且与新的"公共"github仓库没有任何关联.

现在你可以重写"组合"分支的历史记录只包含非公共位,但这会牺牲所有历史记录中"公共"和"私有"文件状态之间的所有连接,因此可重复构建的旧东西会变得几乎不可能.因此,我建议单独保留"组合"分支的历史记录,只需在新提交中删除"public"文件夹.

如果私有文件和公共文件之间的集成非常严格且依赖于版本,则可以使用git submodule从github将特定版本的"public"repo添加到私有仓库中.一个新的子模块文件夹就像前"public"文件夹一样,它将最大限度地减少对私有内容的更改,因为所有"公共"文件都将在旧路径中.请注意,当某些内容被推送到github时,子模块文件夹不会自动更新.您可以通过向本地子模块文件夹添加git钩子来解决这个问题,该文件夹将更新"组合"仓库中的子模块信息.

如果您的私人文件和公共文件之间的集成更加松散,您还可以像处理任何外部第三方项目一样处理公共文件,并将其与其他任何人集成它的方式集成到您的私有资料中,即像任何外部部分你的"私人"软件所依赖的软件.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有