如何在git的历史记录中更改文件的路径?

时间:2010-06-17 02:40:21

标签: git repository history

这就是我所拥有的 - 我的代码的git repo:

projects
       |-proj1 (no git repo here yet)
             |-subproj1 <- current git repo here

这就是我想要的 - 一个git repo,它正在跟踪一个使用我的代码的新项目:

projects
       |-proj1 <-git repo moved to here, but still tracking files in subproj1
             |-subproj1 (no git repo here)

我希望保持历史记录不变,因此新的存储库将引用比原始文件更深一些的文件。什么是最无痛苦的方法呢?

2 个答案:

答案 0 :(得分:12)

可以使用git filter-branch命令重写历史记录。实际上,将目录树移动到子目录中是git filter-branch联机帮助页中给出的剪切和粘贴准备示例之一:

git filter-branch --index-filter '
  git ls-files -s |
  sed "s-\t\"*-&subproj1/-" |
  GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
  mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
' HEAD

答案 1 :(得分:-1)

只需在回购中创建所需的目录结构 - 即将所有文件和文件夹移动到“subproj1”文件夹。

然后暂存所有添加和删除的文件,git将确定它们实际上是重命名的:

git add .
git add -u .
git commit -m "Moved to a subfolder"