Azure Repos と Git についてのメモ

Azure Repos と言うか Git として保存されるログの種別は、以下の 3 つ

  • 全コミットログ
  • プッシュログ
  • コミットログ

このうち、「全コミットログ」については特殊で、Azure DevOps UI からは見えない。 「プッシュログ」も「コミットログ」も最終的には「全コミットログ」を参照しているらしいが、全コミットログに関してはプラットフォームの管理者 (= MS) のみ操作可。

歴史改変について

歴史改変が行えるのは、「コミットログ」のみ。「プッシュログ」は全プッシュログを保持しているので、歴史改変を行って過去のコミットログが削除されたとしても、プッシュログからは辿れてしまう。 (GitHub だと、この「プッシュログ」の画面がないらしく、結果的に歴史改変したら改変後のログにしかアクセスできないらしい)

Clone について

Clone は「コミットログ」のみ持ってくるので、歴史改変された場合は、改変後のログのみ取得する。

Azure Repos で歴史改変したい場合

上述したように、「コミットログ」の歴史改変が行えても、「プッシュログ」から過去のコミットログへアクセス出来てしまうため、意味がない。 それでも歴史改変が必要な場合、既存のリポジトリは捨てる必要がある。必要な作業は、大きく分けると以下。

  1. 当該リポジトリを利用しているユーザーが全て push
  2. 歴史改変を行うユーザーで clone or pull
  3. filter-branch で改変
  4. 改変したコミットログを push
  5. clone --mirror でメタ情報を取得
  6. push --mirror で新しいリポジトリに push (タグ情報もまとめてプッシュされる)
  7. 既存ユーザーには新しいリポジトリを使うように変更してもらい、古いリポジトリは廃棄
参考