--depth=1
パラメーターにより、プロジェクトを新しいリポジトリーにプッシュできなくなります。
詳細については、以下を参照してください。 GitリモートURLを変更した後の「リモート拒否」(浅い更新は許可されません)
あなたがすることができます
git clone <git_url>
フォルダから.gitリポジトリを削除します。すべての履歴が削除されます。
あなたができる
git init
これにより、まったく新しいgitプロジェクトが作成されます。
これは最善の方法ではないかもしれません。しかし、これは動作します。それが役に立てば幸い。
履歴が完全に失われても問題ないとみなす限り、Ajayが提案するアプローチは完全に有効です。ただし、浅いクローンの履歴を保持する場合は、別の提案があります。
浅いクローンは、いわゆる graft point を使用して「最初の」コミットの親を偽造することにより、完全な履歴を持っているふりをします。利用可能な完全な履歴があると仮定した場合、質問を言い換えることができます: 特定のリビジョンの前に履歴を破棄するにはどうすればよいですか?
これは、グラフトポイントと git filter-branch
の組み合わせを使用できることを意味します(リンクされた質問で提案されているように)。ただし、これにより履歴全体が書き換えられ、新しいクローンは最初に複製したリモートと互換性がないことに注意する必要があります。このため、古いリモートをリポジトリから削除する必要があります。
git remote remove <old-remote-name>
これで書き換えを開始できます。現在のmasterにリポジトリの新しいルートをコミットさせたいと仮定しましょう。
git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all
これにより、現在のマスターコミットを新しいルートとして、リポジトリの完全な履歴が書き換えられます。 refs/original
の「バックアップ」参照を削除することで、書き換えを完了できます。さらに、.git/shallow
ファイルを削除できるようになりました。
これを行った後、新しいリモートでnowungrafted履歴をプッシュできるはずです。
次のようなものを試してください:
mkdir -p /tmp/git-copy
cd /tmp/git-copy
# create another copy of your repository
git clone file:///path/to/cloned/repo
cd repo
git rebase -i (first-commit)
# in vim:
# :2,$s/^pick/squash
# :w
# Now wait, it will take a while...
git Push --mirror [email protected]:username/new-repo.git
このリポジトリ で試しました。動作しているようです-履歴はなく、すべてのサブモジュールはそのままです。