使用 git filter-repo 将子目录拆分到它自己的存储库

Split a subdirectory to its own repository using git filter-repo

我正在关注这个:https://docs.github.com/en/get-started/using-git/splitting-a-subfolder-out-into-a-new-repository

我有一个名为 my-repo

的存储库

下面的目录结构如下:

MyProject
   |
   ------ UI
   |
   ------ DB
   |
   ------ SERVER
   |
   ------ ANDROID

我想将上面的 ANDROID 目录拆分到它自己的名为 my-repo-android

的新存储库中

我为此做了以下工作:

  1. 克隆存储库

    git clone git@bitbucket.org:myproject/my-repo.git
    
  2. 进入那个目录:

    cd my-repo
    
  3. 删除原点以避免误推

    git remote rm origin
    
  4. 运行 过滤 repo 命令

    git filter-repo --path MyProject/ANDROID --path-rename ANDROID/:
    

命令运行成功。但是,我没有将根目录设为 ANDROID,而是将目录视为 MyProject/ANDROID,并删除了所有其他内容。

我做错了什么?

如何正确使用filter-repopath-rename选项,使项目结构从MyProject\ANDROID直接变为根目录ANDROID

编辑:

根据下面的评论和答案,以下命令有效:

git filter-repo --path MyProject/ANDROID/ --path-rename MyProject/ANDROID/:ANDROID/

在此之后,我远程创建了一个新的存储库并运行以下命令:

  1. 添加远程来源

    git remote add origin git@bitbucket.org:mypronect/androidRepo.git
    
  2. 大师b运行ch

    git branch -M master
    
  3. 先拉

    git pull origin master --allow-unrelated-histories
    
  4. 推送

    git push -u origin master
    

现在我可以在 bitbucket 上的新 androidRepo 上正确看到 ANDROID 目录。

而且当我打开任何文件时,我也可以看到历史记录。因此 filter-repo 已按预期工作。

然而,我只看到masterb运行ch。我没有看到任何其他历史 b运行ches 和标签。 (我们 tag/create 每个版本都有一个单独的 b运行ch)。

我错过了什么?我怎样才能同时保留与 ANDROID 相关的所有 b运行 目录和标签?

我尝试了以下命令,但没有成功:

 git push --all origin

您在 --path-rename 选项中的 ANDROID 之前忘记了 MyProject。有

  1. --path MyProject/ANDROID 你告诉 filter-repo 只保留路径 MyProject/ANDROID 文件夹。
  2. --path-rename ANDROID/: 您基本上是将 ANDROID 文件夹转换为根文件夹。

我的猜测是您 filter-repo 没有找到 ANDROID 文件夹,因为它在 MyProject 中,因此无法重命名它。

最终命令可能是:

git filter-repo --path MyProject/ANDROID/ --path-rename MyProject/ANDROID/:

或者,对应的快捷方式:

git filter-repo --subdirectory-filter=MyProject/ANDROID

EDIT:我以为你想将 ANDROID 文件夹的 content 作为根目录,但看起来您想要将 ANDROID 文件夹从 ./MyProject 移动到 ./。在这种情况下,@LeGEC 得到了 --path-rename MyProject/ANDROID:ANDROID.

的观点

关于我的问题的更新部分,请看下面的答案:

Push local Git repo to new remote including all branches and tags