sam*_*eep 3 git open-source repository
我目前正在开源我们一直在我们自己的私人git服务器上开发的项目.我们想在GitHub上开源这个项目的部分,因为仍然需要解决开发中的功能.
特别是,假设我的git仓库中有以下目录:
我们希望将公开1和2公开,同时保持dir 3私有.有没有办法做到这一点?
我最好的猜测是你想要使用子模块.您可以让顶级目录只包含这三个子模块.两个将公开,一个不公开.
父项目只知道子模块所需的提交SHA1,因此它不包含有关私有项目的任何实际信息.
如果您不想保留历史记录,只需将这三个目录复制到新位置,git init在其中运行并提交即可.
如果你想保留历史记录,你会想要做这样的事情:
git clone original-project project1
cd project1
git filter-branch --prune-empty --subdirectory-filter subdir1 -- --all
Run Code Online (Sandbox Code Playgroud)
每个子项目一次.该filter-branch命令重写历史记录,仅将给定的子目录保留为顶级.这显然具有潜在的破坏性(虽然它留下了refs的副本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
Run Code Online (Sandbox Code Playgroud)
使用中心URL非常重要; 当人们克隆您的超级项目并运行时git submodule update --init,它将从这些URL克隆子模块.