“取消归档”git存储库

“取消归档”git存储库,git,Git,我有一个git-repo-local,我需要取消git,这样每次提交都存储在一个文件夹中,并且没有git的迹象。因此,它将生成我的分支的文件夹,并在这些文件夹中生成表示每个提交的文件夹 这可能吗?嗯,类似这样的事情: 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" | (

我有一个git-repo-local,我需要取消git,这样每次提交都存储在一个文件夹中,并且没有git的迹象。因此,它将生成我的分支的文件夹,并在这些文件夹中生成表示每个提交的文件夹


这可能吗?

嗯,类似这样的事情:

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等的文件夹中。根据需要更改公式以计算目录

而且这只适用于头部。。。如果你需要所有的分支,就很难想出一个编号方案,否则就很难知道如何称呼目录。尽管您可以简单地使用git rev list-branchs,然后将dir计算为$git name rev$rev


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

嗯,是这样的:

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等的文件夹中。根据需要更改公式以计算目录

而且这只适用于头部。。。如果你需要所有的分支,就很难想出一个编号方案,否则就很难知道如何称呼目录。尽管您可以简单地使用git rev list-branchs,然后将dir计算为$git name rev$rev


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

我在想,使用git过滤器分支树过滤器可以大大简化这一过程。它在该修订的签出根目录中启动每个过滤器。你可以把过滤器做成cp-a。基于revo的某个地方,这并不简单,imho。请注意,我把上面的内容写成了一行,然后为了清晰起见对其进行了扩展,并添加了修订编号。。。我想不是每个人都对sh那么满意。另外,使用git archive和tar从裸repo中工作,只需设置git_DIR环境变量即可。我认为使用git过滤器分支树过滤器可以大大简化这一过程。它在该修订的签出根目录中启动每个过滤器。你可以把过滤器做成cp-a。基于revo的某个地方,这并不简单,imho。请注意,我把上面的内容写成了一行,然后为了清晰起见对其进行了扩展,并添加了修订编号。。。我想不是每个人都对sh那么满意。另外,使用git archive和tar从裸repo开始工作,只需设置git_DIR环境变量。