【问题标题】:Change the root directory of a Git repository更改 Git 存储库的根目录
【发布时间】:2012-07-30 15:07:03
【问题描述】:

我有以下源结构:

/dir1
    file1
    file2
    file3

dir1 是不需要的,因为存储库本身可以像一个文件夹,所以我希望我的 git 存储库看起来像这样:

file1
file2
file3

我应该怎么做才能做到这一点?

【问题讨论】:

  • 你能不能只移动文件并做一个 git add。 Git 会知道文件是否相同。您将丢失历史记录,但可以使用 git log --follow /path/to/file 获取它。看看stackoverflow.com/questions/2314652/…

标签: git repository


【解决方案1】:

免责声明:这将重写历史并成为任何已经克隆了您的存储库的人的 PITA。您不应该在已发布的历史记录中这样做。

也就是说,您应该能够使用 Git 的 filter-branch 命令重写所有树。请务必在使用前了解所有含义(请阅读手册页;有备份)。

git filter-branch \
  --subdirectory-filter dir1 \
  --tag-name-filter cat \
  -- --all

注意。此命令还将保留您的移植物并替换参考。

【讨论】:

  • @BoA:哼。我以为我在答案的顶部写了免责声明。并建议您阅读手册页并了解此命令的含义。我对此是否不清楚?
  • 我确实读过它。我只是忘了为git push 添加-f 标志。
【解决方案2】:

您可以将 .git 移动到子目录中(不要忘记您的 .gitignore)。 然后运行 ​​git init :

重要: 在移动之前做最后一次提交(我会解释它......)

mv .git ./dir1/.
git init .
git add .
git commit

在移动之前进行最后一次提交很重要:git 使用文件的哈希来识别它们。未更改的文件被视为“重命名”。 如果您在移动之前有未提交的文件,它会为每个修改过的文件记录一对“删除”“添加”的文件,您将丢失这些文件的历史记录。

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2018-05-10
    • 2011-11-03
    • 2017-01-07
    • 2013-04-16
    • 1970-01-01
    • 2015-04-01
    • 2021-07-02
    相关资源
    最近更新 更多