2017-01-12 4 views
0

基本的にGitHubには、使用されているコードを含むレポがあります。私たちは実際には完全に新しい構造でこの最初のプロジェクトを再構築しました。これは "両手でお尻を見つけることができない前にここで働いていた馬鹿たちによって行われました"というものでした。あなたはそこにいましたよね?Gitに新しいコードをコミットして古いコードを忘れるには?

とにかく、私は本当に同じレポを使用したいと思っています。なぜなら、プロジェクト名は必要なものだからですが、古いコードの履歴を残しながら、新しいコードベースを使いたいと思っています。それは可能ですか?バージョン2.0のようなもの。私はそれを前にしなければならなかったので、私は知らない。おそらく私はそれのための新しいレポを作成したり、元の名前を変更してからやり直す必要があると思っていますが、私は頼むと思っていました。私はそこに私はあなたに尋ねているので、それについてのinterwebsで何かを見つけることができませんでした。

更新:私がやったことは、Caseyがコメントで言ったようなものでした。私はあなたに答えを与えますが、私はコメントできません。オリジナルのリポジトリの名前を変更し、新しいコード用の新しいリポジトリを作成しました。ものすごく単純。

+4

新しいブランチ+リベース?しかし、古いリポジトリの名前を変更/移動しないでください。 – Casey

+0

ああ、それも私の考えだった。 GitやGitHubの中でそれを扱う便利な方法があるかどうかはわかりませんでした。 –

+5

ローカルファイルのすべての古いファイルを新しいファイルで削除してコミットできます。 - ブームは古いものを保存し、新しいものを持っています。なぜそれは動作しませんか?必要に応じてバージョン2.0タグを追加することもできます。 – Hogan

答えて

4

とにかく、私は本当に同じレポを使用したいのですが、プロジェクト名は必要なものだからですが、古いコードの歴史を残しつつ、新しいコードベース全体から始めたいと思っています。それは可能ですか? git addgit rmで、通常のgit commitを使用して、通常のよう

あなたは、変更をコミットすることができます。 Gitはコードをどれだけ変更するかは実際には気にしません。

準備が整うまで、v2開発を独自の分岐として実行することをお勧めします。書き換えは、通常、非常に、非常に、非常に長い時間を要し、まれにすぐには満足できるものではありません。バージョン2で作業している間は、バージョン1の開発およびリリースを継続するオプションを開いたままにしておき、v2が準備できたら、それをメインブランチにマージします。

v2ブランチでの最初のコミットでは、すべてを削除するだけで、すべてを削除することはほとんどありません。したがって、重要なハードウォンの詳細やビジネスロジックを収穫したり、古いコード互換性を維持したい場合は、古いテストを回帰テストとして保存することをお勧めします。また、ユーザーアカウントや課金情報などの永続的なデータがある場合は、そのデータを新しいアプリケーションに移植して、参照用に古いコードとデータスキーマを使用する必要があります。彼らはあなたも解放する羽目になるかもしれない相互に互換性がないなら、バージョン1および2に互換性がない場合


両方のバージョンと並行して1人のユーザーが、実際にはバージョン2を使用するためにすべてを書き換える必要はありませんコンセプトと名前だけで元のものに(そして、おそらく同じ人たちの一部に)関連する全く新しいプロジェクトを本当に作っているのです。 「WhateverYourProjectIsCalled2」という名前の新しいプロジェクトを開始することは、ユーザーにとってもっと丁寧なことかもしれません。 WhateverYourProjectIsCalledを使用してバージョン1を使用するものと、切り替えたい新しいユーザーまたはWhateverYourProjectIsCalled2を使用することができます。

同じ人の多くが両方のプロジェクトに取り組んでいるので、Github組織を使用して、両方を所有し、すべてのものを複製せずに全体の権限を管理することができます。

これに対処するさまざまな方法の例がたくさんあります。 Perl 5はPerl 4の80%の書き換えであったが、わずかな非互換性しか持たず、同じコードベースとコミュニティを保持していた。対照的に、Perl 6はPerlの完全で互換性のない書き換えであり、Perl 5からPerl 5と完全に分離されました。新しいコード、新しいリポジトリ、新しいコミュニティ、さらには新しいライセンスです。

逆に、Python 3では、Python 2ではいくつかの大きな非互換性が導入されましたが、「Python」のままでした。これは、既存のPython 2コードの膨大な量がPython 3では実行されず、その逆もあるため、Pythonコミュニティで混乱を招いていました。それらは相互に互換性がありません。今度はPython 2 and Python 3 are developed and released in parallelとPythonライブラリはどちらをサポートするかを選択する必要があります。共通のコードを実行することができなくなったにもかかわらず、すべて「Python」です。


どのルートを選択するかは、開発しているものによって異なります。ユーザーアプリケーションであれば、おそらく元のリポジトリに保存しておくことができます。ユーザーは新しいバージョンに適応しますが、古いテスト(少なくともblackbox tests以上)を実行して、動作することを確認します。あなたは古いバグを再導入していません。

プラグインAPIやWeb APIのようにプログラミングライブラリやプログラムに依存するものがあれば、それを新しいプロジェクトに分割して、ユーザーに大規模で突然の互換性がないようにする必要があります。

Gitの素晴らしい点は、あなたが1つの戦略を選択した場合、後で気を変えることができることです。ブランチは独自のリポジトリ(履歴あり)に分割することも、独立したリポジトリをブランチにすることもできます。私は、この書き換えがどこかにあることを確かめるまで、ブランチから始めておくことをお勧めします。


最後に、通常、書き換えは失敗します。彼らは私がやってきない多くの理由のために非常に高いリスクです。 「通常、両手で尻を見つけられなかった馬鹿たちが、ここで働いたのは彼らのやり方でした。時にはそれは悪い理由です。時にはそれは良い理由です。時にはそれは良い理由だったが、もはやそれではない。古いシステムを書き換えようとしている開発者は、しばしば考慮しなかった細かい細部がたくさんあることがわかります。

代わりに、refactoring古いコードを段階的に考えてみてください。それはリスクがずっと低く、ビジネスロジックやバグ修正の詳細についての「馬鹿馬鹿めしさ」の知識を保持しているため、古いシステムの詳細をすべて調べて理解する必要があります。 er)とより制御された変更。

+1

うわー...非常に詳細で完全な答えをありがとう。この特定のプロジェクトは開発の冒頭にあったので、構造以外にはそれほど多くはなかったし、構造が悪かった。だからこそ、リファクタリングではなくリファクタリングを行うのです。あなたが悪い習慣のリストを作ることができ、彼らがリストのすべてを打ちようとしていたら、彼らは本当に近くに来ただろう。 ASPページをRESTエンドポイントとして使用していました。 '言っ途切れる。再度、感謝します。 –

0

古いバージョンの上に新しいコードをコミットすると、履歴に古いバージョン/コードがあり、すべての変更がすべて行われます。安全性の尺度として、現在の(レガシー)コードを別のリポジトリまたは少なくとも「履歴」ブランチにコピー/クローズして、必要なときにアクセスできるようにしてください。 あなたや他の人が何かを変更したかを見るために、コードベースでいつでも "git log"を余分な手段として実行することができます。 https://githowto.com/history

関連する問題