重写 Git 历史以将所有工作放在子文件夹而不是根文件夹中
Rewriting Git history to place all work in a subfolder instead of root
我有一个简单的存储库,它具有线性历史,其中的工作是在根文件夹中完成的。我想重写历史,以便每次提交的所有工作看起来都发生在 /server
目录而不是根目录中。
最后,存储库的根目录中应该有一个名为 server
的文件夹,我项目的所有文件和文件夹现在(以及之前的所有历史记录点)都位于 /server
.
您正在寻找 git filter-repo
。这正是它被写来做的事情;请参阅自述文件的基本原理部分中的#3。
https://github.com/newren/git-filter-repo#design-rationale-behind-filter-repo
git filter-branch --commit-filter '
toptree=`printf "040000 tree %s\tserver" | git mktree`
shift
git commit-tree $toptree "$@"
' -- --branches
我有一个简单的存储库,它具有线性历史,其中的工作是在根文件夹中完成的。我想重写历史,以便每次提交的所有工作看起来都发生在 /server
目录而不是根目录中。
最后,存储库的根目录中应该有一个名为 server
的文件夹,我项目的所有文件和文件夹现在(以及之前的所有历史记录点)都位于 /server
.
您正在寻找 git filter-repo
。这正是它被写来做的事情;请参阅自述文件的基本原理部分中的#3。
https://github.com/newren/git-filter-repo#design-rationale-behind-filter-repo
git filter-branch --commit-filter '
toptree=`printf "040000 tree %s\tserver" | git mktree`
shift
git commit-tree $toptree "$@"
' -- --branches