2016-04-06 14 views
0

なぜ私はこれをやっていますか?私は可能な限りシンプルな方法で同期したい別のリポジトリにフォルダがあります。インデックスに既存のツリーを追加することは可能ですか

Git Internals Git Objectsの章に基づいて、私はフォルダがgitのサブツリーであるという印象を受けました。そして、すでに存在するツリーを指すディレクトリを作成することが可能であると仮定しました。

git update-index --add --cacheinfo 040000 b5fd8e9305 rc 

b5fd8e9305は、ツリーのIDです:

これは私が試したものです。このアプローチでは空のディレクトリしか作成されませんでした。ですから、質問は:git update-cacheコマンドを使ってティーにサブツリーを追加することは可能ですか?


私もGit subtree merging: low level plumbing資料に記載の方法を試してみました。それはうまく動作しますが、なぜ私は期待どおりにupdate-indexがうまくいかなかったのかという疑問がまだあります。

答えて

1

ツリーはがより多くの木を含めることができるオブジェクトが、インデックスは特別であり、通常は何も(参照する)ことで、ツリーのオブジェクトを持っていません。

ツリーを押し込むことはできますが、うまく動作しません(magically change into gitlink entries)。

gitがインデックスから新しいコミットを作成すると、新しいツリーオブジェクトがオンザフライで構築されます。つまり、インデックスには、この時点までにリポジトリにすでに追加されているブロブのID(SHA-1)と、それらを保持する必要があるパス名が含まれています。 git commit - またはより正確には、git write-tree - インデックス内のパス名(および+xまたは-xモードビット)に基づいて必要なツリーのセットを構築します。コミットコードはコミット自体を行うことができます。コミット自体はトップレベルのツリーを参照します。

(結論としては、ツリーではなく各ブロブIDでインデックスを更新する必要があります)

関連する問題