14

マージを行うためにサーバー側のソフトウェアに取り組んでいます。を使用git worktreeすることで、ベア リポジトリの特定のブランチをチェックアウトし、別のブランチをそこにマージできます。大規模なリポジトリでも非常に高速です。

唯一の例外は へのマージのようmasterです。私がそうgit worktree add /tmp/path/to/worktree masterすると、エラーが発生します:

致命的: 'master' は既に '/path/to/bare/repo' でチェックアウトされています

しかし、これは明らかに真実でgit worktree listはありません。

/path/to/bare/repo (ベア)

...そしてもちろん、そのパスにはワーク ツリーはなく、必要な裸のレポ ファイルだけです。

更新: git のメンテナーと連絡を取ったところ、これがバグである可能性があることに同意しました。彼らからテスト用の予備パッチがあります。また、パッチを適用しなくて も、目的の動作を再現できました。

現時点では、境界条件または根本原因が何であるかは完全にはわかりません.gitからの修正が予定されている可能性があります.

4

2 に答える 2

8

これは git のバグであることが判明し、2.5 以降のワークツリーの実装から始まりました。

裸のリポジトリにはまだ HEAD reflink があります。そのリンクが指すものは何でも、git (2.10 までを含む) によって新しいクローン作成者のデフォルトのブランチであると見なされ、アクティブな作業ツリー上にあるかのように (誤って) 扱われます。

この動作を修正するパッチを git メンテナーから受け取りましたが、うまくいくようです。または、裸のレポで update-ref を使用して、マスターから一時的に切り替えることができるはずです。

これらのオプションの両方をテストします。

于 2016-10-10T17:05:11.590 に答える
3

これは間違っていると思います。あなたはそれを彼らに報告したいかもしれません。ケースは明らかなようですが、まだ議論を見つけることができませんでした。

回避策として、実行できますgit update-ref --no-deref HEAD 'HEAD^{commit}'。マスターがチェックアウトされないように、現在のHEADを切り離します

于 2016-10-07T17:41:09.740 に答える