2

マスター ブランチが製品コードを表す Web サイト用の git リポジトリがあります。私は、サイトの「サンドボックス」バージョンをセットアップして、システムの潜在的なユーザーが実験できるようにするように依頼されました。これにより、本番システムでそれを行う必要がなくなります。

サイトのサンドボックス バージョンは、そのように明確にラベル付けする必要があり、一部の機能を無効にする必要があるため、(マスターに基づいて) サンドボックス ブランチを作成し、そこにいくつかのコミットを行って、警告メッセージなどを追加しました。

次に、両方のブランチをアップストリームにプッシュし、Web サーバーで、各ブランチを個別のディレクトリにチェックアウトしました。1 つは本番用、もう 1 つはサンドボックス用です。

これは問題なく動作しますが、さらにコードを書きたいときに問題が発生します。コードをマスター ブランチにコミットすると、運用システムで更新されますが、サンドボックスには新しいコードが表示されません。そのため、サンドボックス ブランチをマスターにリベースして、サンドボックスのコミットが常に本番環境の上に置かれるようにします。しかし、もちろん、それを実行すると、早送りではなくなるため、サンドボックス ブランチを上流にプッシュすることはできなくなります。git サーバーにログインし、ブランチを切り替え、ソフト リセットを実行してから、プッシュをやり直す必要があります。

gitでこれを行うより良い方法は確かにありますか? 私が本当に必要としているのは、現在チェックアウトされているブランチの上にいくつかのコミットを一貫して適用する方法です。

4

2 に答える 2

1

で非早送りプッシュを実行できますgit push remote +branch。ただし、受信側の git リポジトリは、これらを拒否するように構成できます。

ただし、ブランチの古いバージョンを編集し、リベースされたバージョンをアップストリームにプッシュした場合、わずかな問題が発生する可能性があります。これを回避する 1 つの方法は次のとおりです。

# you are on branch X and origin/X has been force-updated
git branch X-tmp   # keep a reference to your new commits
git fetch origin
git reset --hard origin/X   # now X is the same as origin/X

# now you have two options
# option 1: move the new commits from X-tmp to X by cherry-picking
# them one-by-one
git cherry-pick abc123
git cherry-pick def456

# option 2: this rebase should do the right thing and detect the equivalent
# commits in X and X-tmp
git checkout X-tmp
git rebase X
于 2012-10-19T19:46:01.140 に答える
1

master ブランチに両方が存在する必要がある場合は、2 つのコード パスを用意することで、これを別の方法で行います。

例えば。いくつかの構成ファイル (バージョン管理下にない) を使用すると、他のコード パスに切り替えることができます。または、いくつかの環境変数 - あなたに最も適したものは何でも。

于 2012-10-05T18:47:46.483 に答える