5

私はオープンソースライブラリを書いています。私は2つのリモートを使用しています。1つは個人のテストベッドとバックアップ用のプライベートリポジトリで、もう1つはgithubでホストされているパブリックリポジトリです。

プライベートリポジトリでは、ここで多くのコミットとプッシュを保存して実行し、「スペルの修正」や「バグ#123でまだ作業中」などの小さな変更をすべて行います。これでいいので、そのままにしておきたいです。プライベートリポジトリが誰にも共有されることはありません。

githubの公開リポジトリで、gitcommitの履歴をクリーンにしたいと思います。複数のコミットを1つのコミットにマージします(例:「バグ#123を修正」)。

問題は、2つの異なるリモートリポジトリで2つの別々のgit履歴を維持するにはどうすればよいですか?

に関する記事を読んでいgit rebaseます。rebaseそのブランチの履歴全体を変更しますか?パブリックリポジトリの履歴をリベースした場合、プライベートリポジトリもリベースされますか?

2つのブランチを維持する方が良いでしょうか?パブリックサーバーが(マスターとして)1つのブランチのみを認識し、もう1つのブランチが詳細なコミットで両方のブランチを認識している可能性はありますか?

この状況でのベストプラクティスが何であるかはわかりません。お時間をいただきありがとうございます。

4

1 に答える 1

4

問題は、2つの異なるリモートリポジトリで2つの別々のgit履歴を維持するにはどうすればよいですか?

私はあなたに注意したい、その枝は長生きするべきではない。長寿命のブランチは、開発ブランチ(またはブランチの開始元のブランチ)と同期する必要があるため、いつか混乱することになります。そのgit rebase developため、これらすべてに奨励されます。

実際、異なるリモートに1つのブランチの2つのバージョンがあることの利点を理解するのは困難です。単一のコミットを含み、常に強制的に更新されるパブリックリポジトリにこのブランチを含めることのポイントは何ですか?私の場合、それは使用できないナンセンスのように聞こえます。

実生活で物事がどのように起こっているか:

  • 実行したすべてのコミットを使用してブランチを公開します。

  • 機能が完了し、このブランチを(またはブランチが作成された場所に)マージすることに全員が同意するとdevelop、単一のコミットに押しつぶされるか、そのままマージされる可能性があります。

  • 作業していたリモート機能ブランチは別のブランチにマージされ、コミットで補完されないため、削除する必要があります。

したがって、ブランチの開始元のブランチを除いて、維持するものは何もありません。

文字通りの質問に答える:

現在のブランチで行ったすべての変更を含む単一コミットのブランチが必要な場合は、次のようにすることができます。

  • 現在のブランチで行ったすべての変更を取得します。git diff ${SHA}、ここ${SHA}で、ブランチが開始されるブランチの最後のコミットです。
  • この差分をパッチファイルにリダイレクトします> patch.diff
  • でチェックアウト${SHA}git checkout ${SHA}ます。
  • でパッチを適用しpatch -p1 < patch.diffます。
  • でコミットしgit commit -m '...'ます。
  • ブランチの名前を。で変更しgit branch -mます。
  • でリモートにプッシュしgit push ${REMOTE_NAME} ${BRANCH_NAME}ます。
  • 次にを使用してパブリックリモートにプッシュする前に、このコミットをリセットしてgit reset HEAD~1ください。

しかし、これはすべて、通常の開発者が決して使用しない醜い応急修理の束に見えます:[

于 2013-01-27T09:12:16.250 に答える