質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Subversion

Subversionは、使い方はCVSによく似た、CVS(Concurrent Versions System)を改良したバージョン管理ツールです。

Q&A

解決済

2回答

281閲覧

100MB以上のファイルが入っているSVNリポジトリをGitHub用のGitに変換したい

n_ito

総合スコア14

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Subversion

Subversionは、使い方はCVSによく似た、CVS(Concurrent Versions System)を改良したバージョン管理ツールです。

0グッド

0クリップ

投稿2024/03/08 01:37

実現したいこと

100MB以上のファイルが入っているSVNリポジトリをGitHub用のGitに変換したい

前提

SVNで管理していたリポジトリを、"git svn"を使ってGitに変換し、
それをGitHubで管理しようとしています。

ほとんどのリポジトリはうまくいっているのですが、
100MB以上のファイルが複数入っているリポジトリを変換して、
それをGitHubにプッシュしようとすると、エラーになってしまいました。

調べてみたところ、GitHubでは、
100MB以上のファイルはプッシュできない仕様になっていました。

試したこと

そのファイル自体は、無理ならリポジトリから外しても構わないものだったので、
SVNから変換し終わったものをGit上で削除してみましたが、
追加されたログが残っている時点でダメなのか、エラーは消えません。

また、SVNのリポジトリの中には、過去に追加して、
すでに削除済みになっている100MB以上のファイルもあると記憶しています。

このように、SVNで大きなファイルをコミットしてしまっていたリポジトリを、
"git svn"で変換してGitHubにプッシュしたい場合、どのような方法がありますでしょうか。

Git LFSというサービスもあるようですが、アカウントごとの課金制のようですし、
それは最後の手段として考えています。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

svnadmin dumpコマンドでリポジトリをテキストファイル形式に吐き出せます。またこのテキストファイルはsvnadmin loadコマンドで新規のリポジトリに流し込めます。

ですので、吐き出したテキストファイルを編集してからリポジトリに戻せば、特定のファイルを履歴から消し去るなど、リポジトリの履歴を様々に加工できます。ただ、手作業で編集するのは (まったく不可能というわけではないですが) 現実的ではないです。

svndumpfilterコマンドを使えば、上のテキストファイルから特定のファイルパスやブランチの情報だけを抽出したり、逆に削除したりもできます。

svnadminsvndumpfilterの使いかたについてはドキュメントを見てください。

投稿2024/03/08 04:06

ikedas

総合スコア4337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n_ito

2024/03/08 08:30

お二方、解説いただきありがとうございます。 Gitに変換してから削除する方法と、SVNの方で削除する方法と両方調べさせていただきましたが、 以下のGitのコマンドで、指定したファイルをリポジトリ内から完全に消去できました。 (--tag-name-filter catのオプションで、タグも自動変換できました) git filter-branch --index-filter 'git rm --cached --ignore-unmatch ○○○' --tag-name-filter cat -- --all また、original/refsに変換前のブランチやタグがバックアップされていたので、 それらを手動で削除したところ、GitHubにプッシュすることができました。 ありがとうございました。
guest

0

ベストアンサー

gitからであれば、以下のようなコマンドで対象のファイルを削除出来るそうです。

たとえば、password.txt というファイルをコミット履歴から消去したい場合は、次のようにします。

git filter-branch --index-filter 'git rm --cached --ignore-unmatch password.txt' HEAD

このようにすることで、全履歴をさかのぼって、コミット履歴から 'password.txt' を削除することができました。

引用元

詳細は引用元で確認してください。

投稿2024/03/08 03:32

fiveHundred

総合スコア9811

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n_ito

2024/03/08 08:28

お二方、解説いただきありがとうございます。 Gitに変換してから削除する方法と、SVNの方で削除する方法と両方調べさせていただきましたが、 以下のGitのコマンドで、指定したファイルをリポジトリ内から完全に消去できました。 (--tag-name-filter catのオプションで、タグも自動変換できました) git filter-branch --index-filter 'git rm --cached --ignore-unmatch ○○○' --tag-name-filter cat -- --all また、original/refsに変換前のブランチやタグがバックアップされていたので、 それらを手動で削除したところ、GitHubにプッシュすることができました。
ikedas

2024/03/08 13:56

> original/refsに変換前のブランチやタグがバックアップされていたので 私もこういうものの扱いがどうなるのか気になったので (gitにこういうものをお掃除するコマンドがあったような気もするけどすぐにわからなかった)、私の回答ではsubversionのリポジトリの時点でいらないものを削除しておく方法を紹介しました。 origin/refsを整理すればいいと分かったとのことで、何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問