ここに1つの可能な答えがあります。 find
コマンドを使用すると、サブモジュールに含まれるファイルを除いて、リポジトリ内のすべてのファイルのリストを生成できます。サブモジュールは「.git
ディレクトリを含むディレクトリ」と識別します。 findコマンドは次のようになります。
それがディレクトリである場合、このディレクトリに含まれるすべてのものを見ている」という意味と
.git
とという名前のディレクトリが含まれてい
find . \(\! -depth 0 -type d -execdir test -f {}/.git \; -prune \) \
-o -type f -print
は、最上位のディレクトリではありません、に降りませんそれ以外の場合はファイル名を出力します。 "
あなたはtar
コマンドへの入力としてこれを使用することができます:STDIN上のファイルのリストを受け入れ
tar -T- -n -cz -f repo.tar.gz
(-T-
は、find
が私たちのためにあることを行っているので、確認してください)(サブディレクトリに再帰的にしていないになり、そして、(-c
)gzipで圧縮された(-z
)出力を作成します
完全なコマンドは次のようになります。
find . \(\! -depth 0 -type d -execdir test -f {}/.git \; -prune \) \
-o -type f -print |
tar -T- -n -cz -f repo.tar.gz
これは、現在のディレクトリにrepo.tar.gz
という名前の圧縮tarアーカイブを作成します。
git archive
を使用していないことで、あなたが誤ってgitリポジトリの一部ではない、あなたの作業ディレクトリ内のファイルが含まれることがあります。これが失敗することを
方法。 git clean
を使用すると、それを避けることができます。
また、まだリポジトリにコミットされていない変更を含むアーカイブを構築することもできます。スクリプトを実行する前に、変更されていない変更を明示的にチェックすることで、これを回避できます。