“Unarchive”一个git存储库

时间:2011-01-03 21:55:03

标签: git

我有一个git repo(本地),我需要取消git它,以便每个提交存储在一个文件夹中,并且没有git的迹象。因此它应该导致我的分支文件夹和这些文件夹文件夹内的每个提交。

这可能吗?

1 个答案:

答案 0 :(得分:4)

嗯,这样的事情:

n=0
git rev-list --reverse HEAD | while read rev; do
  n=$(expr $n + 1)
  dir="$n-$rev"
  mkdir "$dir"
  git archive --format=tar "$rev" | ( cd $dir && tar xvf - )
done

这会将修订版本放入编号为“1-hash”,“2-hash”等的文件夹中。(根据需要更改公式以计算 dir )。

此外,这仅适用于“HEAD”...如果您需要所有分支,很难想出编号方案,而且很难知道如何调用目录。虽然您只需使用git rev-list --branches,然后将dir计算为$(git name-rev "$rev")

理想情况下,您可以使用硬链接提取文件来表示相同的内容,但这将是更多的工作!