【问题标题】:How to open only part of a git repository如何仅打开 git 存储库的一部分
【发布时间】:2011-06-09 03:35:40
【问题描述】:

我目前正在开源一个我们一直在我们自己的私人 git 服务器上开发的项目。我们希望在 GitHub 上开源该项目的部分,因为仍有一些功能需要解决。

特别是,假设我的 git repo 中有以下目录:

  • 子目录 1(公共)
  • 子目录 2(公共)
  • 子目录 3(私有)

我们希望公开目录 1 和 2,同时保持目录 3 不公开。有什么好办法吗?

【问题讨论】:

    标签: git open-source repository


    【解决方案1】:

    我最好的猜测是你想使用submodules。您可以让您的顶级目录只包含这三个子模块。两个将公开,一个不公开。

    父项目只知道子模块所需的提交SHA1,因此它不会包含有关私有项目的任何实际信息。

    如果您不想保留历史记录,只需将这三个目录复制到新位置,在其中运行 git init,然后提交即可。

    如果您确实想保留历史记录,则需要执行以下操作:

    git clone original-project project1
    cd project1
    git filter-branch --prune-empty --subdirectory-filter subdir1 -- --all
    

    每个子项目一次。 filter-branch 命令重写历史,只保留给定的子目录作为顶层。这显然具有潜在的破坏性(尽管它会在refs/originals/* 中留下参考副本),因此在单独的克隆中执行此操作非常重要!

    无论哪种情况,您都将创建自己的超级项目:

    mkdir superproject
    cd superproject
    git init
    git submodule add <URL of central project1 repo>
    git submodule add <URL of central project2 repo>
    git submodule add <URL of central project3 repo>
    git commit
    

    使用中心网址很重要;当人们克隆您的超级项目并运行 git submodule update --init 时,它会从这些 URL 中克隆子模块。

    【讨论】:

    • +1。我打算链接到this guide,但你说了所有需要说的话!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多