5

大きな git リポジトリの小さな部分にアクセスする必要がある竹のビルドがあります。時間とディスク容量を節約するために、ビルドに関連するリポジトリの部分のみをチェックアウトしたいと思います。浅いチェックアウトについてはすでに知っています。それ以上のことを行い、チェックアウトを 1 つのフォルダー (およびその子孫) だけに制限したいと考えています。

このオプションが表示され、これを使用する必要があると思いますが、機能させることができませんでした: ここに画像の説明を入力

必要な最小限のチェックアウトを行うにはどうすればよいですか?

4

1 に答える 1

2

最も簡単なのは、おそらくリポジトリタグをホストしている人がいて、必要な特定のツリーをコミットすることです。例えば、

アップストリーム:

git tag quickie $(git commit-tree $(git rev-parse HEAD:path/to/dir) </dev/null)

君:

git fetch upstream quickie

アップストリームリポジトリでブランチ上のサブツリーを自動的に追跡する場合は、次のように(適切に復号化されたバージョンで)実行できます。

sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x

見た目よりも簡単です。これを試して:

mkdir ~/tryitout && cd ~/tryitout && git init foo && git init bar --bare
cat >bar/hooks/post-receive <<'EOF'
sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x
EOF
chmod a+x bar/hooks/post-receive
cd foo
mkdir subtree && touch subtree/oooo && git add . && git commit -am-
git push ../bar master

後期更新-

ファイルシステムを他のリポジトリと共有している場合は、次のように実行できます。

git clone --no-checkout /path/to/local/repo/.git subtree
cd subtree
git commit-tree origin/rev:subtree </dev/null | xargs git checkout -B peek

そして、revを合わせて、origin / master:include、origin / next:include、origin / v1.4:somewhereelsenowなどに変更することで、自由に跳ね回ることができます。

私は通常、大規模なリポジトリ用の「空の」ブランチを持っています。Gitは、空のディレクトリの1つの特殊なケースを処理します。

git mktree </dev/null | xargs git commit-tree | xargs git checkout -b empty
于 2012-05-04T23:32:44.467 に答える