我目前正在开源我们在个人私人git服务器上开发的项目。我们想在GitHub上打开这个项目的源代码 part ,因为仍然需要解决开发中的功能。
特别假设我的git仓库中有以下目录:
我们希望将公开1和2公开,同时保持dir 3私有。有没有办法做到这一点?
答案 0 :(得分:6)
我最好的猜测是你要使用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
时,它将从这些网址克隆子模块。