最も簡単なのは、誰かがrepoタグをホストして、あなたが望む特定のツリーをコミットすることです。上流には例えば、
:
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
を、あなたがで周りにバウンスすることができますインクルード、原点/次:インクルード、原点/ v1.4:どこかにあるもの、何でも。
私は大規模なreposのための "空の"ブランチを持っています。 Gitは空のディレクトリの特別なケースを扱います:
git mktree </dev/null | xargs git commit-tree | xargs git checkout -b empty
p.s. HEADはもちろんあなたが望むどんな回転でもかまいません – jthill
しかし、タグを維持する必要はありませんか?つまり、レポの関連部分が変更された場合、その変更をチェリーピックする必要があります。あるいは私は誤解していますか? –
@AndrewEisenbergあなたはフェッチしようとしていることについての参考情報が必要です。アップストリームでサブツリーを自動追跡する方法を示す行を追加します – jthill