git - 将 git 移动到更高的文件夹?

标签 git

我有一个文件夹已经在 git 下一段时间了,我需要将 git 'repo' 文件夹向上移动一个文件夹,例如我的文件夹是:

/project/data/
/project/src/.git

我需要将其移至:

/project/data/
/project/src/
/project/.git

编辑:
我在那里拥有该存储库已经有一段时间了,它有一个我想保留的预先存在的历史记录,我还需要在服务器上移动该存储库(与本地计算机的结构完全相同)

最佳答案

如果您没有预先存在的历史记录,只想在正确的位置重新启动而不移动太多文件,那么评论中提到的重复问题可以为您提供正确的答案。

如果您想保留现有历史记录,但假装这一切都发生在更高的目录中,则可以使用以下方法:

cd /project/src
git filter-branch --tree-filter 'mkdir src; git mv -k * .gitignore src'
cd ..
mv src junk
mv junk/src src
mv junk/.git .git

filter-branch 命令会重写您的历史记录行,以便所有操作都发生在 src/ 层次结构下。其余的将事情移回原位。如果周围有未跟踪的文件,它们最终将被留在 junk/ 命名空间中。

警告:我使用git mv -k .gitignore src作为过滤器,因为这是一种快速而简单的方法,但它无法移动您的任何点文件可能有。 (在这种情况下,请将它们添加到命令中。)正确的方法是使用 git ls-files 作为索引列表,但要正确使用它非常棘手就目前的情况来看,如果你能避免它,就一定要这么做。

关于git - 将 git 移动到更高的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052501/

相关文章:

java - JGIT - 获得每一个授权的私有(private)项目

git - 错误: bad DVC file name 'my_server\models\*.tar.gz.dvc' is git-ignored

git cherry-pick 到另一个分支

git - “Unregistered Git root detected” 因为项目的父目录由 Git 控制版本

git - Beyond Compare 4 在 OSX 上运行时失败,因为 git difftool

git - 为什么 "git checkout <filename>"仅适用于非暂存文件?

git: 'credential-cache' 不是 git 命令 - 删除设置

git - 如何使用 git kraken 进行强制推送

git - 使用 git checkin 对 UTF8 BOM 的更改

git - 如何在 GitKraken 免费版中查看空格