我在子目录中有一个存储库,现在我想拥有父目录 在版本控制下,但保留存储库的当前历史记录。
所以使用以下树:
a/b/c
c
目前正在拥有一个存储库,但我希望在a
中拥有一个存储库,并在c
中包含所有历史记录。
我确信有一种方法可以解决这个问题,也许还有一些git filter-branch
?我不想使用子模块,我想最终有一个存储库。
答案 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
现在添加所有内容并提交