git clone --depth
コマンドオプションは言う
--depth <depth>
Create a shallow clone with a history truncated to the specified number of revisions.
A shallow repository has a number of limitations
(you cannot clone or fetch from it, nor push from nor into it),
but is adequate if you are only interested in the recent history of a large project with a long history,
and would want to send in fixes as patches.
浅いクローンにこの制限があるのはなぜですか? なぜパッチのみのワークフローなのですか?
一部のプロジェクト ワークフローでは、最新のコミットだけを単一のブランチからコーダーに渡してから、コーダーがpush
メイン サーバーに (早送りで) 開発できるようにする必要があります。これは、一部はセキュリティ、IP 保護、およびレポのサイズのためであり、一部は、大きなレポが素朴なコーダーにもたらす混乱を減らすためです。これを可能にする git ワークフローはありますか?
更新: Karl Bielefeldt の回答に基づくgit checkout --orphan
と、正しい回答になるはずです。ただし、そのブランチだけを新しいユーザーに「複製」し、効果的にプッシュできるようにする必要があります。
マニュアルページには次のように記載されています。
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>] --orphan
という名前の新しい孤立したブランチを作成し、
<new_branch>
そこから開始し<start_point>
て切り替えます。この新しいブランチで行われた最初のコミットには親がなく、他のすべてのブランチやコミットから完全に切り離された新しい履歴のルートになります。インデックスと作業ツリーは、以前に を実行したかのように調整されます
git checkout <start_point>
。これにより、ルートコミットを<start_point>
簡単に実行することで、一連のパスを記録する新しい履歴を開始できます。git commit -a
これは、完全な履歴を公開せずにコミットからツリーを公開する場合に役立ちます。これを実行して、現在のツリーは「クリーン」であるが、完全な履歴には独自のコードや邪魔されたコードが含まれているプロジェクトのオープン ソース ブランチを公開する場合があります。
のパスとはまったく異なる一連のパスを記録する切断された履歴を開始する場合は、作業ツリーの最上位から
<start_point>
実行して、孤立したブランチを作成した直後にインデックスと作業ツリーをクリアする必要があります。git rm -rf .
その後、別の場所からファイルをコピーしたり、tarball を抽出したりして、新しいファイルを準備し、作業ツリーを再作成する準備が整います。
Junio のコメントへの VonC のリンクは興味深いものです。clone <branch> --options
この場合、マニュアルでガイダンスを提供し、適切なコマンド [eg ] でレポの関連部分だけを抽出できるようにする必要があると思います。push
リポジトリの一致をロックダウンする履歴の下部にいくつかのリンクされたコミットと SHA1 があることで、明らかに成功の可能性が高まります。
Git 1.9.0 の更新: リリース ノート 14 Feb '14。
「浅くクローンされたリポジトリからのフェッチは、主に関連するコードパスが慎重に吟味されておらず、そのような使用法をサポートしていなかったため、禁止されていました。このリリースでは、浅くクローンされたリポジトリからより制御された方法でオブジェクトを転送できるようにします。 (つまり、レシーバーは切り捨てられた履歴を持つ浅いリポジトリになります)。」
これは、浅いクローン作成者にとって朗報です。次へ - 狭いクローンの可能性。