首页 > 解决方案 > git mv 整个 repo 上一层

问题描述

StackOverflow 社区,

我有一个具有此层次结构的 git 存储库:

(git-tree-root)
    software
        development
            project1
            project2
            ...
            projectX
        operational
            project1
            project2
            ...
            projectX

我想要一个更简单的层次结构,

(git-tree-root)
    dev
        project1
        project2
        ...
        projectX
    op
        project1
        project2
        ...
        projectX

维护文件的 git 历史记录至关重要。我的第一个想法是:

git mv -kr software/development/* dev/

git mv -kr software/operational/* op/

k 标志是在移动文件时忽略可能的错误,而 r 标志是移动在相应文件夹中递归找到的所有文件和文件夹(开发和操作)。然后 git add 和 git commit 更改。

另外,我想确保如果用户的文件仍然“未推送”到存储库,他们不会将它们推送到旧的层次结构。每当他们 git pull 我的更改时,Git 都应该处理这个问题,对吗?

重要的是我做对了,所以我很感激你的帮助。提前谢谢大家。

标签: git

解决方案


它应该像这样简单

git mv software/development dev
git mv software/operational op

如果还有其他software你不再需要的东西

git rm -r software

接着

git commit

请注意,Git 不存储文件标识。“文件历史”仅从提交历史中重建。git log --follow some/file只要您只调查一个文件的历史记录可能会有所帮助,但是当文件内容有足够的差异并且您正在比较此事件之前和之后的状态时,您可能会遇到问题,因为 Git 无法将这两者关联起来状态为“单个文件”。


推荐阅读