2

私はgithubにライブラリを持っており、約1年前に、下位互換性のないアプリを完全に書き直しました。それは「構造化」と呼ばれるブランチ上にあります。現在、ライブラリをインストールしているほとんどの人がそのブランチを使用しているので、それをマスターにして、現在のマスターを「レガシー」に移動したいと思います。

確かにアプリが壊れてしまうので、古いマスターにいた人が新しいマスターに早送りできるようにしたくありません。それらをレガシーブランチに転送すること、または少なくとも例外をスローして、レガシーブランチをチェックアウトするように指示するメッセージを表示することは可能ですか?

4

3 に答える 3

1

フックを実装しないと不可能だと思いますが、それだけの価値はないかもしれません。

サーバーにリポジトリのクローンを作成し、古いリポジトリをそのままにして、必要に応じてバグ修正をプルし、新しい「構造化」ライブラリ用に別のリポジトリを作成すると思います。

于 2012-06-06T18:54:28.233 に答える
0

Gitブランチは単なるラベルであるため、それらを迂回させる方法はありません。新しいmasterブランチが古いブランチと異なることを示す方法はありません。

masterクライアントがブランチを壊したくない場合は、ブランチからクローンを作成するのは悪い考えだと思います。この目的のためにリリースブランチまたはタグを用意する必要があります。そうすれば、ユーザーはそれらからクローンを作成でき、下位互換性のある更新のみを取得する(ブランチの場合)か、変更しない(の場合)安定したブランチがあることがわかります。タグ)。

警告に関しては、誰かがサーバーからフェッチしたときに実行するためにサーバーに置くことができるフックがないため、それも不可能です(プッシュの場合のみ可能です)。GitHubページに明確に書き込む必要があります。

もう1つのアイデアは、最後のコミットを修正してmaster、古いコミットを早送りしないようにすることmasterです。衝突を引き起こす方法でそれを行います。このように、古いマスターを持つ誰かが引っ張るときはいつでも、彼らは衝突を起こし、何が起こっているのかをチェックしなければなりません。

于 2012-06-06T18:55:41.163 に答える
0

質問の「迂回」部分については、新しいマスターの最初のコミットとして、いつでも次のようなことを行うことができます。

#ifndef IMPLEMENTED_STRUCTURED
#error "The master branch of project x has been completely rewritten and will break legacy applications.  If you are unable to update your application, switch to the legacy branch of this project and your code should continue working as before.  If you want to use the new structured code, simply add a preprocessor definition for IMPLEMENTED_STRUCTURED to get rid of this error message."
#endif

これにより、メッセージを読んで実行するアクションのコースを決定するまで、誰のコードも正常にコンパイルされなくなります。

うまくいけば、C / C ++を使用していない場合、言語に同様の動作を可能にする機能があります。

于 2012-06-06T19:06:44.403 に答える