1. ホーム
  2. git

[解決済み] git export」(「svn export」のようなもの)を行うか?

2022-03-14 11:52:49

質問

を使わずにツリーのコピーを作成する、良い "git export" ソリューションがあるかどうか、ずっと考えていました。 .git リポジトリディレクトリです。私が知っているのは少なくとも3つの方法です。

  1. git clone を削除し、その後に .git リポジトリディレクトリを作成します。
  2. git checkout-index はこの機能を暗示していますが、"目的のツリーをインデックスに読み込むだけ..."で始まっており、どうやればいいのか全く分かりません。
  3. git-export はサードパーティのスクリプトで、本質的には git clone を一時的な場所にコピーし、その後に rsync --exclude='.git' を最終目的地に送る。

どの解決策も、私には納得のいくものではありません。最も近いのは svn export というのも、どちらもターゲットディレクトリを空にする必要があるからです。しかし、インデックスにツリーを読み込むというのがどういうことなのかがわかれば、オプション2の方がもっと良さそうです。

解決方法は?

おそらく、これを実現する最も簡単な方法は git archive . もし、本当に展開されたツリーだけが必要なら、次のようにすることもできます。

git archive master | tar -x -C /somewhere/else

git から何かを「エクスポート」する必要がある場合、大抵の場合は圧縮されたアーカイブが必要なので、以下のような方法をとります。

git archive master | bzip2 >source-tree.tar.bz2

ZIP アーカイブです。

git archive --format zip --output /full/path/to/zipfile.zip master 

git help archive を使えば、かなり柔軟に対応できます。


アーカイブには.gitディレクトリは含まれませんが、.gitignoreや.gitattributesなどのgit固有の隠しファイルが含まれることに注意してください。アーカイブにそれらを含めたくない場合は、.gitattributes ファイルに export-ignore 属性を指定し、アーカイブを作成する前にそれをコミットするようにしましょう。 続きを読む...


注:インデックスのエクスポートに興味がある場合、コマンドは次のとおりです。

git checkout-index -a -f --prefix=/destination/path/

(参照 グレッグの回答 をご覧ください)