使用 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
的新存储库中
我为此做了以下工作:
克隆存储库
git clone git@bitbucket.org:myproject/my-repo.git
进入那个目录:
cd my-repo
删除原点以避免误推
git remote rm origin
运行 过滤 repo 命令
git filter-repo --path MyProject/ANDROID --path-rename ANDROID/:
命令运行成功。但是,我没有将根目录设为 ANDROID
,而是将目录视为 MyProject/ANDROID
,并删除了所有其他内容。
我做错了什么?
如何正确使用filter-repo
path-rename
选项,使项目结构从MyProject\ANDROID
直接变为根目录ANDROID
?
编辑:
根据下面的评论和答案,以下命令有效:
git filter-repo --path MyProject/ANDROID/ --path-rename MyProject/ANDROID/:ANDROID/
在此之后,我远程创建了一个新的存储库并运行以下命令:
添加远程来源
git remote add origin git@bitbucket.org:mypronect/androidRepo.git
大师b运行ch
git branch -M master
先拉
git pull origin master --allow-unrelated-histories
推送
git push -u origin master
现在我可以在 bitbucket 上的新 androidRepo
上正确看到 ANDROID
目录。
而且当我打开任何文件时,我也可以看到历史记录。因此 filter-repo
已按预期工作。
然而,我只看到master
b运行ch。我没有看到任何其他历史 b运行ches 和标签。 (我们 tag/create 每个版本都有一个单独的 b运行ch)。
我错过了什么?我怎样才能同时保留与 ANDROID
相关的所有 b运行 目录和标签?
我尝试了以下命令,但没有成功:
git push --all origin
您在 --path-rename
选项中的 ANDROID
之前忘记了 MyProject
。有
--path MyProject/ANDROID
你告诉 filter-repo
只保留路径 MyProject/ANDROID
文件夹。
--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
我正在关注这个: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
我为此做了以下工作:
克隆存储库
git clone git@bitbucket.org:myproject/my-repo.git
进入那个目录:
cd my-repo
删除原点以避免误推
git remote rm origin
运行 过滤 repo 命令
git filter-repo --path MyProject/ANDROID --path-rename ANDROID/:
命令运行成功。但是,我没有将根目录设为 ANDROID
,而是将目录视为 MyProject/ANDROID
,并删除了所有其他内容。
我做错了什么?
如何正确使用filter-repo
path-rename
选项,使项目结构从MyProject\ANDROID
直接变为根目录ANDROID
?
编辑:
根据下面的评论和答案,以下命令有效:
git filter-repo --path MyProject/ANDROID/ --path-rename MyProject/ANDROID/:ANDROID/
在此之后,我远程创建了一个新的存储库并运行以下命令:
添加远程来源
git remote add origin git@bitbucket.org:mypronect/androidRepo.git
大师b运行ch
git branch -M master
先拉
git pull origin master --allow-unrelated-histories
推送
git push -u origin master
现在我可以在 bitbucket 上的新 androidRepo
上正确看到 ANDROID
目录。
而且当我打开任何文件时,我也可以看到历史记录。因此 filter-repo
已按预期工作。
然而,我只看到master
b运行ch。我没有看到任何其他历史 b运行ches 和标签。 (我们 tag/create 每个版本都有一个单独的 b运行ch)。
我错过了什么?我怎样才能同时保留与 ANDROID
相关的所有 b运行 目录和标签?
我尝试了以下命令,但没有成功:
git push --all origin
您在 --path-rename
选项中的 ANDROID
之前忘记了 MyProject
。有
--path MyProject/ANDROID
你告诉filter-repo
只保留路径MyProject/ANDROID
文件夹。--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