【问题标题】:How do I move my git project to a subdirectory for all commits, except one file?如何将我的 git 项目移动到所有提交的子目录中,除了一个文件?
【发布时间】:2022-01-04 21:17:20
【问题描述】:

我正在尝试将我的整个 repo 根目录移动到一个子目录中,除了一个文件之外的所有内容。

例如,我有类似的东西:

root
-Folder1
-Folder2
-.gitattributes

对于所有的提交和历史,我想要

root
-ProjectA
--Folder1
--Folder2
-.gitattributes

即,我想将所有 except .gitattributes 移动到子目录。如果我使用

 git filter-repo --to-subdirectory-filter ProjectA/

一切都被移动了。除了单个文件,我找不到移动所有内容的策略。

如何将文件保存在原处?或者我如何使用另一个命令将该文件移回根目录?

【问题讨论】:

    标签: git git-filter-repo


    【解决方案1】:

    如果可以,您将列出除.gitattributes 之外的所有元素,并在一个命令中重命名它们,使用path renaming

    git filter-repo --path-rename Folder1:ProjectA/Folder1 \
                    --path-rename Folder2:ProjectA/Folder2 \
                    ...
    

    OP House 建议在the comments 中使用更明智的方法:

    • 将所有内容移至子目录,
    • 然后将.gitattributes 移回--path-rename ProjectA/.gitattributes:.gitattributes

    我会在单独克隆的存储库中执行每个步骤,以确保在失败时可以返回到原始存储库。
    第二步将在第一步的存储库克隆中完成。

    【讨论】:

    • 哇。冯C。男人!
    • 我确实尝试过这条路线,但最终得到了一个完全空的仓库。我在这种方法中看到的问题是,如果在历史记录的某个地方,根目录中有另一个文件/文件夹,则无法通过移动当前位于根目录中的所有文件/文件夹来正确移动它。 git-filter-repo 似乎有一个与移动文件相关的错误是参数中的冒号,无法处理。
    • @House 我喜欢你的第二种方法。它应该有效。
    • 应该,是的,但是错误阻止了它(它说参数无效)。我什至尝试使用文件方法,使用ProjectA/.gitattributes=>.gitattributes 创建一个文件。不幸的是,这只是在重写提交时冻结。
    • @House 您可以在第一步的存储库克隆中尝试第二步(--path-rename ProjectA/.gitattributes:.gitattributes)吗?
    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2023-04-07
    • 1970-01-01
    • 2013-07-02
    • 2016-10-09
    • 2017-05-27
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多