1

基本的にプライベートリポジトリとして開始された2年前のリポジトリがあるため、リポジトリの履歴のキーファイル、暗号化キー、さまざまな場所にある大量のイメージなど、さまざまな時点で履歴に含まれていました。それらはすべて追跡されなくなりましたが、履歴にはまだ存在しています。

新しい開発者を採用しているため、ソースは現在共有されています。私は、ほとんどクリーンなリポジトリでクリーンなスタートを切りたいと考えています。ただし、この移行期間中は、2 つのリポジトリ間でパッチ/コミットを共有して、古いリポジトリにも対処する必要がある場合があります。

git の以前の履歴から脱却し、古いリポジトリと新しいクリーンなリポジトリ間でコミットを共有する機能を可能な限りクリーンに保持するための最善の方法は何ですか?

目的:

  1. 新しいリポジトリでは利用できない履歴の過去の方法で、機密性の高いコミットを行います。
  2. 新しいリポジトリですべての機能を許可します (クローン、プッシュ、フェッチ、git の通常のすべて)
  3. 古いリポジトリが新しいリポジトリからのパッチ/コミットを認識する能力を最大化する
  4. [あまり重要ではありません] 作業コピーに存在しない古代のコミットにバイナリがないため、新しいリポジトリを高速化します。
4

4 に答える 4

2

既存のリポジトリに新しい明確なブランチを作成するだけでは役に立ちません。ユーザーがこのブランチを読み取ることができれば、機密情報を含む古いブランチにもアクセスできます。これを克服するには、過去に関する知識がない (または限られた知識しかない) 新しいレポを作成する必要があります。

これを達成するには、次のことを行います。

  • リポジトリの比較的新しい状態 (たとえば、最後のラベル付きバージョンなど) を取得V1.0し、これを開始点として使用して、新しい開発者が使用する新しいリポジトリ ( ) を作成します。newrepo

  • 次に、古い機密データを保持している古いリポジトリを指すリモートという名前のリモートをマシンに追加します。oldrepo

  • V1.0次に、最新の from までのすべてのコミットを新しいリポジトリoldrepocherry-pick取り込みます。この時点で、新しいリポジトリはoldrepoダーティ ヒストリがない場合と同じ状態になります。

  • ここで、( )から裸のレポを複製します。すべての開発者がクローンを作成して作業します。newreponewrepo.gitnewrepo.git

パッチなどを からnewrepo.gitoldrepoまたはその逆に取得する場合、この操作はあなたによって行われます。つまり、同僚が生成された必要なパッチを古いリポジトリに送信しformat-patchamそれらを古いリポジトリに送信します。でいくつかの修正を行った場合は、それらをoldrepo再度に戻して、開発者が利用できるようにすることができます。cherry-picknewrepo.git

これにより、アクセスが制限さoldrepoれ、同僚は機密データを見ることができなくなります。

于 2012-07-03T09:55:56.380 に答える
0

git branch を使用して、新しいブランチを作成します。次に、最初から最後までのコミットを git rebase して、古いブランチの履歴のないバージョンを作成します。

いつでも古いブランチに戻って、コミット固有の詳細を取得できます。

于 2012-07-02T21:03:53.970 に答える