如何移动 git 存储库的根目录?

How can I move the root of my git repository?

首先,我知道 here 之前有人问过这个问题。 问题是我确实喜欢保留历史。

所以我尝试了我能找到的所有其他步骤,这些步骤涉及将 .git 目录向上移动一级或创建一个子目录并将所有文件从当前根目录移动到该目录中。但是我一直在丢失文件的历史记录。

有趣的是 Git Bash(所以在我的本地命令行上)告诉我它检测到文件被重命名,当我 运行 git log我还得到了文件的历史记录,正如我所期望的那样。但是当我查看 github 时,历史记录已经消失,并且提交仅包含要删除和添加的文件列表(而不是我期望的重命名列表)。

我说的存储库是 this one。有一个名为 "Moving" 的分支,我试图在其中移动文件。

如果有帮助,我采取的具体步骤是:

  1. 在包含 .git
  2. 的目录中创建子目录 "src"
  3. 将所有文件移动到该子目录
  4. 将目录从 .git 所在的级别向下移动一级
  5. 运行 a git add src and git add nbproject 其中 src 是我在步骤 1 中创建的子目录,nbproject 是我在步骤 3 中向下移动的目录
  6. 运行 对所有 "old files"
  7. 一个 git rm
  8. 运行 a git status 并注意检测到所有文件都被重命名
  9. 运行一个git log src/README以确保历史记录正常
  10. 最后将更改提交到 github
  11. 请注意,当我在 github
  12. 上查看我的自述文件时,历史记录已经消失

Git 不存储文件副本和重命名,它使用试探法来计算。我推测 Github 没有接受重命名,因为他们关闭了 rename/copy 启发式以节省处理能力。它影响不大,但影响如何在 Github 上显示一次提交。最简单的做法就是忽略它并继续编码。也许联系 Github 技术支持。

否则,您的另一个选择是rewrite history to make your subdirectory the main directory。这将保留历史记录,但会更改所有提交 ID,这可能会导致日志消息和问题跟踪器中的引用丢失。 (我确实记得有一个工具可以更改日志消息中的提交 ID,但我不记得了。)