web-dev-qa-db-ja.com

gitで特定のディレクトリをプルする方法

Gitを使用したプロジェクトがあり、Subversionのようにmyproject/javascriptのように特定のディレクトリを複製またはプルしたいだけです。
いくつかの変更を行い、コミットして、もう一度プッシュバックします。
それが可能だ?

154
bluefoot
  1. リポジトリコピーの先頭にcd
  2. git fetch
  3. git checkout HEAD path/to/your/dir/or/file

    • (3)の「path/...」は、「.../file」を含むレポルートのすぐ下のディレクトリから始まります

    • 「HEAD」の代わりに、特定のコミットのハッシュコードが使用される場合があり、そのコミットに固有のリビジョン(ファイル)またはリビジョン(dir)を取得することに注意してください。

182
vergueishon

空のディレクトリ内:

git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
73
scottalan

答えを探して、見つけて、あきらめて、再試行するなどではなく、最終的に別のSOスレッドでこれに対する解決策を見つけました。

1つを除くすべてのフォルダーをgit-pullする方法

そこにあるものをコピーして貼り付けるには:

git init
git remote add -f Origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull Origin master

OPが望むこと(1つのディレクトリのみで作業)を行うには、上記の手順を実行するときに、その1つのディレクトリを.git/info/sparse-checkoutに追加するだけです。

@cforbishに感謝します!

22
msb

不可能です。すべてのリポジトリをプルするか、何も必要はありません。

13
shingara

たぶん、このコマンドは役に立ちます:

git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit  path/to/your/dir/or/file > files.tar

「Etvoilà」

8
fabrice belle

そうですか。サブモジュールを作成してみて、うまくいくかどうかを確認します。結果を報告します。編集:スパースチェックアウトとサブモジュールは私のために働いた。私が読んだリンク(VonCとMichel Jansenによる)は次のとおりです。

1つを除くすべてのフォルダーをgit-pullする方法

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

http://vmiklos.hu/blog/sparse-checkout-example-in-git-1-7

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

gitサブモジュールの更新

4
bluefoot

git clone --filter Git 2.19から

このオプションは、サーバーからの不要なオブジェクトのフェッチを実際にスキップします。

現在のサポート状況を説明する詳細な回答を以下に書いています: Gitリポジトリのサブディレクトリのみを複製するにはどうすればよいですか?

その領域でgit cloneに実装されたものはすべて、git pullの類似物を持つ可能性が非常に高いです。

ディレクトリに入力せずに最新の変更を取得する場合は、次の操作を実行できます。

$ git -C <Path to directory> pull
0
feralamillo

場合によっては、diffを経由するという厳密な条件なしに、ファイルの以前のコピーを確認したいだけです。

このような場合、リポジトリのクローンを作成し、興味のある特定のコミットをチェックアウトして、そのクローンされたリポジトリのサブディレクトリを見るのは簡単です。すべてがローカルであるため、完了したらこのクローンを削除できます。

0
Abizern