【问题标题】:How do I move the .git folder to a parent folder without losing history?如何在不丢失历史记录的情况下将 .git 文件夹移动到父文件夹?
【发布时间】:2016-03-17 17:26:37
【问题描述】:

我的本​​地 git 仓库是这样的

C:\MyRepo
      \MyProject
           \.git
           \ProjectFolder1
           \ProjectFolder2
           \ProjectFolder3

现在我想添加几个文件夹,这些文件夹需要直接位于“MyRepo”下并且需要属于同一个存储库。我想这意味着 .git 文件夹也应该直接放在“MyRepo”下

C:\MyRepo
     \.git
     \NewFolder1
     \NewFolder2
     \MyProject
           \ProjectFolder1
           \ProjectFolder2
           \ProjectFolder3

如何在不丢失历史记录的情况下将 .git 文件夹上移一层

我使用的是 Windows 操作系统,git 版本是 2.6.3.windows.1

【问题讨论】:

标签: git


【解决方案1】:

在移动 git 存储库之前,您可以将所有文件移动到内部 MyProject 文件夹。这样的事情可能会奏效:

cd C:\MyRepo\MyProject
mkdir MyProject
git mv -k * MyProject
git commit
move .git ..
cd MyProject
move * ..
cd ..
rmdir MyProject
cd ..
git add NewFolder1 NewFolder2
git commit

另见How to import existing Git repository into another?

【讨论】:

  • 我喜欢-k 标志。我不知道。
  • @AtnNn 我将 .git 文件夹从“C:\MyRepo\MyProject\.git”剪切并粘贴到“C:\MyRepo”。然后从命令提示符“C:\MyRepo”我执行“git add *”然后“git commit”在本地提交更改。然后在“MyRepo”下添加新文件夹并再次执行添加和提交。这似乎有效。这个过程有什么问题吗
  • @AtnNn 同样,当我运行你的前 2 个命令时,它会创建一个新文件夹,然后我检查 git status ..它说“在分支主机上。没有提交,工作目录干净”跨度>
  • @user3862378 你所做的可能会奏效。如果git status 没有抱怨并且您的历史记录被保留,那么您应该没问题。也许我的指示是错误的。我在 bash 中对它们进行了测试,并将它们翻译成 windows。
【解决方案2】:

需要考虑的重要一点是,repo 的父文件夹的名称与 repo 无关。

  1. 将“MyRepo/MyProject”重命名为“MyRepo/tmp”
  2. 创建一个新文件夹“MyRepo/tmp/MyProject”
  3. 将所有(“.git”除外)从“MyRepo/tmp”移动到“MyRepo/tmp/MyProject”
  4. commit -m "将所有内容移至 MyProject"
  5. 将所有(包括“.git”)从“MyRepo/tmp”移动到“MyRepo”
  6. 删除“MyRepo/tmp”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2012-08-06
    • 2011-05-09
    • 2020-03-16
    • 2017-09-15
    相关资源
    最近更新 更多