如何扩展git存储库

时间:2012-01-03 21:29:53

标签: git

我在子目录中有一个存储库,现在我想拥有父目录  在版本控制下,但保留存储库的当前历史记录。

所以使用以下树:

a/b/c

c目前正在拥有一个存储库,但我希望在a中拥有一个存储库,并在c中包含所有历史记录。

我确信有一种方法可以解决这个问题,也许还有一些git filter-branch?我不想使用子模块,我想最终有一个存储库。

2 个答案:

答案 0 :(得分:2)

您可以选择:

您可以简单地将当前结构移动到新结构中。然后将整个回购提升一级。 git add -A将添加所有更改,这些更改是一堆删除和新文件添加。 git status会将其显示为已移动。每个对象都存储一次,无论它处于什么路径,因此这不会是一个昂贵的操作。这将是最简单的选择。此时您还可以放入其他高级目录。

在c:

mkdir b
cd b
mkdir c
mv <all other objects from top level> c
git add -A
git commit -m "moved everything"
mv c a
# clean up
如果你正在进行合并并帮助你,那么git将确定文件被移动的事实。

或者,如果您愿意,可以使用过滤器分支来更改历史记录,但您的所有提交都将具有不同的SHA1。这可能是不可取的。

答案 1 :(得分:0)

不是一个简单的MV工作吗?所有'c'都会显示为重命名。

这样的事情:(请不要剪切和粘贴,因为我没有尝试过这个......只是得到要点..)

cp -r /someroot/a/b/c /tmp/tmproot/c    # make a full backup of the given repository
rm -Rf /someroot/a/b/c                  # completely remove c, leaving only a/b
mv -r /someroot/a /tmp/tmproot        # moves a/b to the repository
cd /tmp/tmproot
git mv -r c a/b                         # git-moves c into a/b, so all history of c is retained

现在你的/ tmp / tmproot目录应该有一个/ b / c,其中c保留了历史记录

rm /someroot
mv -Rf /tmp/tmproot /someroot               # replace the old rep with your new one

现在添加所有内容并提交