2011-01-03 12 views
1

私はgit repo(local)を持っているので、各コミットがフォルダに格納され、gitの兆候がないようにun-gitする必要があります。だから私のブランチのフォルダとそれぞれのコミットを表すこれらのフォルダのフォルダ内のフォルダになるはずです。"unarchive" gitリポジトリ

これは可能ですか?

+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-ハッシュ」番のフォルダにリビジョンを置く、「2-ハッシュ」などは、(ディレクトリとして適切なを計算する式を変更) 。

これは "HEAD"でも有効です...すべてのブランチが必要な場合は番号付けスキームを考え出すのが難しく、それ以外の場合はディレクトリをどのように呼び出すのかを知るのは難しいです。 git rev-list --branchesを使い、dirを$(git name-rev "$rev")として計算することもできますが、

ハードリンクを使用してファイルを抽出することは理想的ですが、これはかなり作業になります。

+0

私は 'git filter-branch --tree-filter'を使ってこれを単純化できると思っていました。そのリビジョンのチェックアウトのルートにある各フィルタを起動します。フィルタを 'cp -a 'にすることができます。どこかに基づく」 –

+0

それは本当に簡単ではない、イホ。気にして、私は上記のように1つのライナーとして書いた後、分かりやすくするためにそれを展開し、改訂番号を付け加えました。また、 "git archive"とtarは裸のリポジトリから動作し、GIT_DIR環境変数を設定するだけです。 – araqnid

関連する問題