【问题标题】:Move Git repository up 3 levels from current folder, preserving history and adding new files将 Git 存储库从当前文件夹上移 3 级,保留历史记录并添加新文件
【发布时间】:2016-02-29 15:32:31
【问题描述】:

我知道有很多与此类似的主题,但我找不到我的情况的答案。使用 git 1.8.3.1 我有一个 git repo:

/path/to/my/git/repo/.git

我想将存储库移动到 /path/.git

同时保留原始 repo 的历史记录 + 从新根目录添加新文件。 我尝试简单地将 .git 文件夹移动到适当的位置,重新添加所有文件并提交,但我丢失了原始存储库的历史记录。

我怎样才能正确地做到这一点? (过滤器分支?)

谢谢

更新 #1 我的意图是将文件保留在原处,并扩展存储库以包含其父目录+保留嵌套文件的历史记录:

旧回购: /path/to/my/git/repo/

新仓库: /路径/

更新 #2 我在想也许有比this 更简单的解决方案,无需移动实际文件。

【问题讨论】:

  • 描述毫无意义。 repo/.git 是存储库,repo 是工作副本。因此,您可以将repo 文件夹移动到任何地方,它根本不会影响历史记录。您究竟想重新添加什么?
  • 我理解问题是关于扩展现有存储库以包含其父目录。 @amirb,你能把你的问题编辑得更清楚一点吗?
  • 根据您的要求编辑,谢谢!
  • 所以您想有效地将​​当前文件从 repo 的根目录 / 下移到 /to/my/repo/
  • @Hasturkun 正好相反,我想将文件保留在原处并扩展存储库以包含其父目录。

标签: git


【解决方案1】:

所以,这里基本上有两个步骤:

A.移动 git 下的文件,使 git repo 具有正确的根目录:

cd  /path/to/my/git/repo/
mkdir -p to/my/git/repo/
git mv * to/my/git/repo/
git status #check all files are moved.
git commit -m "megamove!!!"

B.将结果移动到正确的位置:

mv * /path/
cd /path/
rm -r to/my/git/repo/ #drop empty dir

另外,另一种方法,更直接(但有时如果你有错误的 CRLF 可能不是很好):

mv /path/to/my/git/repo/.git /path/
cd /path
git add -A
git status #check all files are moved.
git commit -m "megamove!!!"

历史应该被保留,检查它git log -M

【讨论】:

  • 第二种方法不保留文件历史记录,如果我执行“git log -p --to/my/git/repo/file1”它不会显示文件的所有版本...: -(
  • 实际上,当我为特定文件执行 git log 时,这两种方法都没有给我任何东西。 (也许我做错了什么?)
  • 我想通了!事实证明,我需要执行“git log --follow master --some.file”来查看该文件的历史记录,因为当我将它重新添加到 repo 的新位置时它被重命名了。谢谢!
【解决方案2】:

.git 目录包含您的 Git 存储库的元数据。实际的 Git 存储库可能位于 repo/ 下。

就您的操作系统而言,您的 repo 只是一个目录。它可以移动到任何你想要的地方,Git 存储库(包含历史记录)将随之移动。

因此,在您的示例中,您可能想要的是将 repo/ 移动到 /path:

mv /path/to/my/git/repo /path/.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多