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

时间:2013-11-18 16:16:06

标签: git

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

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

我需要将其移至:

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

修改
我有一段时间的回购,它有一个我想保留的预先存在的历史记录,我还需要在服务器上移动回购(与本地机器完全相同的结构)

2 个答案:

答案 0 :(得分:2)

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

如果你想保留现有的历史记录,但假装一切都发生在更高的目录上,这是一种方法:

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作为过滤器,因为它是快速简便的方法,但它无法移动您可能拥有的任何点文件。 (在这种情况下,将它们添加到命令中。) Right 的方式是使用git ls-files作为索引列表,但是就移动而言,向右移动是非常棘手的,所以,如果你可以避免它,请务必这样做。

答案 1 :(得分:1)

这可能应该有效:

mv /project/src/.git /project/
cd /project
git add .
git commit

它实质上创建了一个新的提交,它将所有文件移动到src目录并在其旁边添加数据。