仅将 git 存储库的一部分推送到第二个远程存储库

Push only part of git repository to second remote repository

我有一个现有的 git 存储库(例如,在我组织的私有存储库中),其中包含几个组织在特定文件夹中的子项目。有没有办法将这些子项目中的每一个克隆到特定的第二个远程存储库(例如 github 上)?我知道 git 子树似乎反过来很方便(将现有子项目作为新整体项目的依赖项)。但是,如果我理解正确的话,使用子树需要我从现有的整个项目中删除子项目并再次将它们添加为子树。

一个要求是能够将包括其子项目在内的整个项目推送到私有组织的远程存储库,以在那里实现一个工作版本。

你读过子树文档了吗?

  split [<local-commit>]
      Extract a new, synthetic project history from the history of the <prefix> subtree of <local-commit>,
      or of HEAD if no <local-commit> is given. The new history includes only the commits (including
      merges) that affected <prefix>, and each of those commits now  has the contents of <prefix> at the
      root of the project instead of in a subdirectory. Thus, the newly created history is suitable for
      export as a separate git repository.

听起来像你想要的。

这是一个有效的例子;

初始化演示库;

mkdir subtree-split
cd subtree-split/
git init
git commit -m "Init." --allow-empty

为项目A添加一些内容;

mkdir A
touch A/README.txt
git add A/
git commit -m "Readme for A."

为项目B添加一些内容;

mkdir B
touch B/README.txt
git add B/
git commit -m "Readme for B."

将 B 拆分为新的子树;

git subtree --prefix=B/ split 

创建一个新的存储库,只将 B 的历史推送到;

cd ..
mkdir subtree-B
cd subtree-B
git init
git commit -m "Init subtree-B." --allow-empty

将子树B历史推送到远程;

cd ../subtree-split/
git subtree --prefix B/ push ../subtree-B HEAD

查看B的历史;

cd ../subtree-B
git log --all  --pretty=oneline --abbrev-commit
a26e5de (HEAD -> master) Init subtree-B.
0523c62 (HEAD) Readme for B.

没有A的历史!