2009-10-24 6 views
25

可能性の重複:
Is there any way to clone a git repository’s sub-directory only?クローン部品

私はgithubのプロジェクトの一部のクローンを作成しようとしているが、私は唯一のルートフォルダを取得することができます。 githubを使ってみるのは初めてですが、私はtortoisegitをインストールしました。私はsvnとcvsに使っていましたが、あなたがチェックアウトしたいフォルダを取ることができましたが、gitだけがルートフォルダに.gitファイルしか持っていないようです私は何をすべきかわからない。

+0

あなたは.gitディレクトリしか持っていないのが奇妙なようです。リポジトリを正しくクローンしましたか? – Spoike

+0

私はあなたが私を誤解したと思う、私はすべてのファイルを取得するが、私はプロジェクトのサブフォルダが欲しい。 – Dennis

答えて

8

サブツリーのマージがあります。

しかし、ここでは、おそらくあなたのニーズに十分に簡単な、しかし部分的な解決策です。ただフォークと定期的にをマージします。

  1. フォーク(クローン)リポジトリ
  2. あなたはあなたがしたいとき
  3. が、将来的には

をコミットする必要がありますかどこにサブフォルダを必要と動かない部分を削除しますアップストリームのGitコードと同期して、フォークとマージしてください。保存したファイルは、アップストリームのものと同期してバックアップされます。小さなクリーンアップは、git statusから見やすいものがあります。

+2

複雑な音がして、誰かがsvnやcvsでgitを使うのはなぜですか? – Dennis

+1

GitHubの文脈では、Gitは専用チームとしても、時々寄稿者からでも、他の人たちと協力しやすくすると言います。 – JasonSmith

7

あなたが望むものを「部分チェックアウト」といいます。現在のところGitではサポートされていませんが、メーリングリストにはたまに表示されます。 Gitには、部分チェックアウトをサポートするために必要な内部部品がありますが、ユーザーとしてそれらを使用する簡単な方法はありません。私はGitが最終的に部分チェックアウトを行うことができると思いますが、それが起こるまでにはしばらく時間がかかるかもしれません。

jhs's answers(サブツリーのマージ; rm、mv、コミット、マージ)に加えて、部分チェックアウトを使用しやすくするために役立つa third-party ‘subtree’ commandもあります。それはその主要な目標ではありませんが、部分チェックアウトでどのように使用するかは明白ではありません。 Gitを十分に知っていれば、それを解決することができますが、Gitを初めて使う人は、このサブツリーコマンドはかなり不透明です。

最後に、最新のファイルをダウンロードする場合は、use git archive to download a tar file of a specific branch or tag (or any commit-ish)にすることができます。これはGitHubでは動作しないかもしれませんが(サーバーの設定に依存します)、私はチェックしていません。たとえそれが直接動作しなくても、自分の「裸」に複製し、ミラーレポを作成してからアーカイブを取り出すことができます(サブツリー)。

+1

これはOct'09から追加されているかもしれませんが、GitHubからアーカイブを取得するには、実際にはリポジトリのコピーを引っ張ることができるrepo/fork/branch/commitの右上の領域に 'Download'ボタンがあります。歴史のその点からのコード(最初にそこにナビゲートした場合など、前回のコミット) – johnny

-1

これは本当にあなたがgitで行うことではありません。 DVCSを使用しているので、リポジトリの履歴全体をプルダウンしていることを覚えておいてください。ディレクトリの外にあるファイルを変更するコミットに何が起こるはずですか?

プロジェクトが十分に大きければ、クローン作成するすべてのリポジトリのメンテナーは、セクションを分割するためにサブモジュールを使用する必要があるため、開発者は作業したい領域をプルダウンするだけです。

Git(一般的にDVCS)は、開発者のためにエンドユーザ向けに設計されたものではありません。私はgitが(特にgithubとの組み合わせで)コーディングに非常に役立つことがわかります。私が貢献したいギブスのプロジェクトがあれば、チェックアウト、ハッキング、差分の作成、見つけようとするよりも、簡単にフォークし、ハックして、ハックして、プッシュアップし、どこにメールを送るのか、開発者がマージする前にdiffが壊れないことを期待しているのです。

Gitは確かにsvnよりも複雑ですが、それはコーディングが複雑なプロセスなのでです。私はDVCS上で育ったので、集中VCSワークフローは非常に苦痛です。私はこれまで慣れてきたことをすべて実行することは許されません。だから、同じことをするならgitとsvnを使うのはもっと複雑になるでしょうが、利点はだから多くの場合あなたができることがそれ以上あることです。 Gitは、Linuxカーネル開発のために開発されたものです。

+5

gitが提供するものではない理由はわかりません。この要求は、 "コミット時に/foo/bar/.*と一致するすべてのファイルを私に渡します"という6789abcは、よく定義され、有用です。 – jameshfisher