将存储库向下移动一层而不破坏提交

Moving repository one hierarchy down without destroying commits

所以现在我有这个文件夹结构:

\frontend
  -- .git/
  -- project 1 folder
  -- project 2 folder

现在我们决定将每个项目分开放在自己的仓库中,并为每个项目更改远程 url。

我怎样才能让它不破坏我 project 1 folder 的提交历史,但下次我 git push 时,根文件夹现在将是 project 1 folder 而不是 frontend ?

我看到了 this 类似的问题,但接受的答案似乎是错误的(根文件夹仍包含在提交中)

我认为您链接到的答案确实是您想要的:Moving a git repository down a hierarchy level

也许不清楚的是如何将它准确地应用到您的案例中,因为您是在向上移动而不是向下移动。所以这里适合你的情况:

# start with a fresh clone because you don't want any "dirty" files here!
git clone <remote>/frontend.git
# enter the fresh clone
cd frontend
# remove project 2 files
rm -rf "project 2 folder"
# move project 1 files up
mv "project 1 folder"/* .
rmdir "project 1 folder"
# create massive change commit
git add -A
git commit -m "Moved project 1 up and removed project 2"
git push

现在,所有这些所在的文件夹 frontend 实际上并不是存储库本身的一部分,而是它所在的名称。您可以在下次克隆它时重命名它:

git clone <remote>/frontend.git "project 1 folder"

这只会更改该克隆的名称。

或者您可以在您的 Git 服务器上将存储库本身重命名为 "project 1 folder".git,假设您的 Git 主机允许。当然,这样做会使任何人过去从该存储库克隆的任何沙箱的远程 URL 失效,因此您必须修复这些问题。

现在,问题是项目 2 不见了。我认为您可能需要做的是在 Git 服务器上创建两个新的存储库,每个项目一个。按照上述步骤,在 git push 之前停止,改为执行此操作:

# Create "project 1 folder".git on your Git server and add it as a second remote
git remote add p1 <remotes>/"project 1 folder".git
# push to that remote instead of origin - list all branches you want to preserve
git push p1 master

并重复上述所有操作,调换项目 1 和 2 的角色。