@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

フェッチ済みリモートのすべてのブランチを別のリモートにプッシュする

アクセスできないリモートリポジトリをクローンしたディレクトリを受領し、アクセスできるリポジトリミラーリングするような状況。

前提

  • clone済み
  • リモート(origin)へはアクセスできない
  • ローカルはmasterブランチのみ
  • リモートのブランチはfetch済み(チェックアウト可能)

やったこと

  • アクセスできるリポジトリを作成
  • (以下受領したディレクトリでの作業。SourceTreeから開いたターミナルなどでの想定)
  • 作成したリポジトリを新しいリモート(our)として追加
    • Gitではリモートリポジトリを複数管理できるので、デフォルトのorigin(アクセスできない環境)に加え、ourという名前でアクセスできるリポジトリのURLを追加
    • git remote add our https://.....reponame.git
    • これはローカルのgitの設定を書き換えるだけ
  • リモート(origin)のすべてのブランチをチェックアウト(したことにする)
    • git b -r|grep -v HEAD|grep ' origin/'|sed 's/ *origin\///'|xargs -I {} git branch --track {} origin/{}
    • リモートブランチの一覧から、現在のブランチを除外し、 origin/を含むブランチに限定し、 origin/ を削除して、ローカルブランチとしてチェックアウトした状態にする
  • すべてのローカルブランチをリモート(our)にプッシュする
    • git push --all our

もしかすると、この作業は git push --mirror our だけで完結する内容なのかもしれないが、未確認。

参考URL