GITリポジトリのクローンを作成し、.git
ディレクトリを作成したくない。つまり、ファイルが欲しいだけです。これを行う方法はありますか?
git clone --no-checkout
私が望むものとは正反対のことをしました(.git
ディレクトリだけを与えました)。
ローカルリポジトリではなく、リモートリポジトリに対してこれを実行しようとしています。これは、「「git export」を実行する方法(「svn export」など)の複製ではないことを意味します(解決策は、同じ)。
GITリポジトリのクローンを作成し、.git
ディレクトリを作成したくない。つまり、ファイルが欲しいだけです。これを行う方法はありますか?
git clone --no-checkout
私が望むものとは正反対のことをしました(.git
ディレクトリだけを与えました)。
ローカルリポジトリではなく、リモートリポジトリに対してこれを実行しようとしています。これは、「「git export」を実行する方法(「svn export」など)の複製ではないことを意味します(解決策は、同じ)。
回答:
あなたがでます探しているものから最も近いだろうgitのコマンドgit archive
。gitを使用するプロジェクトのバックアップを
参照してください。すべてのファイル(スクリプトを使用している場合はサブモジュールを含む)がアーカイブに含まれます。git-archive-all
その後、そのアーカイブをどこでも使用でき、ファイルのみが返され、.git
ディレクトリは返されません。
git archive --remote=<repository URL> | tar -t
最初のレベルからのみフォルダとファイルが必要な場合:
git archive --remote=<repository URL> | tar -t --exclude="*/*"
リモートリポジトリの第1レベルのフォルダーのみを一覧表示するには:
git archive --remote=<repository URL> | tar -t --exclude="*/*" | grep "/"
注:GitHubではサポートされていません(サポートされていません)
したがって、クローンを作成し(クローン作成のステップを短くするために浅く)、ローカルにアーカイブする必要があります。
git clone --depth=1 git@github.com:xxx/yyy.git
cd yyy
git archive --format=tar aTag -o aTag.tar
別のオプションは、浅いクローンを作成することです(以下で説明)。ただし、.gitフォルダーを別の場所に配置します。
git --git-dir=/path/to/another/folder.git clone --depth=1 /url/to/repo
repoフォルダーにはファイルのみが含まれ、は含まれません.git
。
注:git --git-dir
はコマンドのgit
オプションであり、ではありませんgit clone
。
Git 2.14.X / 2.15(2017年第4四半期)で更新:空のフォルダーを追加しないようにします。
「
git archive
」は、特にpathspecと一緒に使用すると、Git自体が空のディレクトリを作成しない場合でも、その出力に空のディレクトリが保存されていました。
これは修正されました。
RenéScharfe(``)によるコミット4318094(2017年9月12日)を参照してください。
提案者:ジェフキング(peff
)。
(合併によりJunio C浜野- gitster
-で62b1cb7コミットし、2017年9月25日)を
archive
:空のディレクトリをアーカイブに追加しないgitは空のディレクトリを追跡しません
git archive
が、だまされて一部をアーカイブに入れる可能性があります。
これはオブジェクトデータベースでサポートされていますが、インデックスで表すことができないため、実際に発生することはほとんどありません。空のディレクトリはgitでサポートされていないため、アーカイブにも書き込まないでください。
空のディレクトリが本当に必要な場合は、空の.gitignore
ファイルをその中に置くことによって追跡およびアーカイブできます。
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
ているtar: This does not look like a tar archive
。GitHubで動作しませんか?また、どういう@
意味ですか?
@
:削除しました。また、GitHubはリモートをサポートしていませんgit archive
。代替案を提案するために回答を編集しました。
浅いクローンを作成して、最後のいくつかのリビジョンのみを取得できます。
git clone --depth 1 git://url
次に、単に.gitディレクトリを削除するかgit archive
、ツリーをエクスポートするために使用します。
クローンを実行してから.git
ディレクトリを削除して、作業コピーのみを作成するのはどうですか?
編集:または実際にはなぜクローンを使用するのですか?.git
ディレクトリなしでgitリポジトリが必要だと言うと、少し混乱します。ツリーの一部の状態のコピーだけが必要な場合cp -R
は、git cloneの代わりにシェルで実行してから、.git
後で削除してください。
ソースコードのコピーが欲しいだけのようです。もしそうなら、なぜ単にディレクトリをコピーして.gitディレクトリをコピーから除外しないのですか?
これを行うには、作業ツリーからリポジトリを分割する別の方法があります。
この方法は、これらのgit-less gitファイルを定期的に更新する必要がある場合に役立ちます。たとえば、ソースファイルをチェックアウトしてアーティファクトを構築する必要がある場合に使用し、次にアーティファクトを別のリポジトリにコピーしてサーバーにデプロイするだけです。また、ソースコードをサーバーにプッシュするときにも使用します。チェックアウトしてwwwディレクトリにビルドするソースコード。
2つのフォルダーを作成します。1つはgit用で、もう1つは作業ファイル用です。
mkdir workingfiles
mkdir barerepo.git
裸のgitリポジトリを初期化します。
cd barerepo.git
git --bare init
次に、ポスト受信フックを作成します。
touch hooks/post-receive
chmod ug+x hooks/post-receive
お気に入りのエディターでポストレシーブを編集します。
GIT_WORK_TREE=/path/to/workingfiles git checkout -f
# optional stuff:
cd down/to/some/directory
[do some stuff]
これをリモートとして追加します。
git remote add myserver ssh://user@host:/path/to/barerepo.git
これで、このベアリポジトリにプッシュするたびに、作業ツリーがにチェックアウトされ/workingfiles/
ます。しかし、/workingfiles/
それ自体はバージョン管理されていません。で実行git status
する/workingfiles/
と、エラーが発生しますfatal: Not a git repository (or any parent up to mount point /data)
。それは単なるファイルです。
他のソリューションとは異なりrm -r .git
、コマンドは必要ないので、/workingfiles/
他のgitリポジトリがある場合、他のリポジトリのgitファイルの削除に使用されるコマンドについて心配する必要はありません。