14

私のgitリポジトリ用に次のセットアップを作成したいと思います:

現在、すべての作業ファイルを含むローカル git リポジトリがあります。中央のベア リポジトリと、他の 2 つの非ベア リポジトリ (1 つはライブ アプリケーション用、もう 1 つはテスト バージョン用) をセットアップできるようにしたいと考えています。

ローカルからテスト ブランチの中央ベア リポジトリに変更をプッシュできるようにしたいと考えています。次に、私のテスト リポジトリでは、常にベア リポジトリのテスト ブランチからプルします。

変更をライブに移行する準備ができたら、テスト ブランチとマスター ブランチを中央のベア リポジトリにマージできるようにしたいと考えています。その後、ライブ リポジトリはマスター ブランチからプルできます。

したがって、このスキームでは、テスト リポジトリは常にテスト ブランチからプルされ、ライブ リポジトリは常にマスター ブランチからプルされます。

ただし、裸のリポジトリでブランチをマージする方法がわかりません。git-merge と git-checkout は、作業ツリーがないと機能しないようです。

だから、私の質問は2つあります:

  1. 裸のレポにブランチをマージする標準的な方法はありますか?
  2. 私のレポのセットアップが貧弱なので、これは簡単ではありませんか? (その場合、ベスト プラクティスのためにこのアーキテクチャをどのように変更しますか?)
4

3 に答える 3

18

これは実際には裸のリポジトリで実行できますが、通常のインターフェイスを回避する必要があることに注意してください。

$ git read-tree -i -m branch1 branch2
$ COMMIT=$(git commit-tree $(git write-tree) -p branch1 -p branch2 < commit message)
$ git update-ref mergedbranch $COMMIT
于 2016-03-07T14:18:54.547 に答える
14

git checkoutブランチをワーキング ツリーにチェックアウトする – ワーキング ツリーがなければ、これがどのように機能したと思いますか? またgit merge、他のほとんどのコマンドは機能しません。これは、ベア リポジトリ内に HEAD がないためです。

あなたの質問に答えるには: 裸のリポジトリ内で作業していません。裸のリポジトリは、データを保持するためだけに存在します。それを使用したい場合は、裸ではないクローンを使用してください。

したがって、他のリポジトリからは、ベア リポジトリからプルし、ローカルでマージして、変更をそこにプッシュします。これは開発リポジトリから行う必要があります。ライブ リポジトリとテスト リポジトリがブランチからのみプルされるようにします。

于 2011-11-02T17:56:52.443 に答える
2

最初にベアリポジトリからクローンを作成し、ブランチをマージしてから、ベアリポジトリに再度プッシュする必要があります。競合を解決するためのベアリポジトリに作業ツリーがないためです。

于 2012-05-14T08:10:49.450 に答える