1

数日以内に、1つの複雑なコミットを行う必要があります。詳細を説明します。

(svnから移行した後)GITを使用しており、3つの作業ブランチがあります。

  • トランク-即時の変更/修正のためのブランチ、開発者の遊び場など
  • プリプロダクション-ブランチ。クライアントテストのすべての機能が使用されます。
  • 生産-名前はそれをすべて言います、製品の作業部門

したがって、通常、開発者はそのようなシーケンスを実行します。

新しいチケット->ローカルコピー->トランク->プリプロダクション->プロダクション

かなり標準的だと思います。

さて、質問自体に:トランクには、svnからの移行前にあったタスクの1つの完了した地獄(1000時間以上)があるので、git-branchedなどではなく、単なる束ですコミットします。そのタスクをプリプロダクションにマージしてから、それに応じてプロダクションブランチにマージする必要があります。

私はそれを行うための最も痛みのない方法が何であるかを完全に確信することはできません。移行後にブランチに共通の祖先コミットがあるかどうかさえわかりません。

問題を解決できる一般的な方法はありますか?たぶん、このタスクに関連するコミットをブランチにグループ化してから、このブランチをプレおよびプロダクションとマージすることができますか?

アドバイスをいただければ幸いです。

4

2 に答える 2

2

祖先コミット(常に良いアイデアIMO)が必要な場合は、SVNを使用して、トランクとプリプロダクション/プロダクションが最後に同じであった実際の分岐点を見つけ、gitとプレプロダクションブランチで対応するコミットのSHA1を見つけることができます。これを行う:

git checkout -b temp trunk // Don't use trunk itself in case it breaks
git rebase <SHA1 goes here> // Rewrite the commits as changes from that SHA1
// Possibly fix some conflicts
// Verify manually that you have the code you expect
git branch -m trunk old_trunk // Move old trunk aside
git branch -m temp trunk // Here's the new trunk!

これにより、プリプロダクションからトランクが分岐したままになります。プリプロダクションもプロダクションから分岐するように、繰り返す必要があるかもしれません。

それらをきれいにマージするには、git rerereをオンにして(競合を解決する方法が記録され、プリプロダクションをプロダクションにマージするときに自動的に再利用されるようにします)、次の手順を実行します。

git checkout preproduction
git merge --no-ff trunk

これにより、マージコミット(早送りなし)が行われるため、1行の長いコミットではなく、機能の開始位置と停止位置を確認できます。また、トランクブランチはそのままになるので、次の機能をマージする準備ができた状態でコミットし続けることができます。

このプロセスを管理するために使用するモデルはgit-flowです。これは、説明しているワークフローによく似ているため、これをサポートするコマンドラインツールと一緒にチェックすることをお勧めします。

また、コミットをグループ化したい場合は、リベースを使用してそれらをトランクのメインフローから取り出し、早送りなしのマージとして元に戻して、特定の機能の開始位置と終了位置を確認できるようにします。

于 2012-06-26T11:16:04.727 に答える
1

プロダクションをブランチしてから、この新しいブランチとマージする傾向があります。その後、問題を解決し、最終的にこのブランチを新しいプリプロダクションにし、最終的に本番環境にマージするか、履歴に応じて本番環境2にします。http://wwwに一連のGitチュートリアルがあります。 ava.co.uk/gitと1つはマージ中です。それらはあなたがすでに知っているものかもしれません、その場合私は謝罪します、あるいはそれらはあなたがあなたの選んだアプローチに自信を与えるのに十分明確かもしれません。HTH

于 2012-06-26T11:04:19.887 に答える