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

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

ただいまの
回答率

90.48%

  • Git

    1669questions

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

  • GitHub

    1063questions

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

  • SVN

    98questions

    SVNは、CollabNet社が開発したソースコードなどを管理する集中型のバージョン管理システムです。 Subversionとも呼ばれ、CVSの問題点を解決すべく開発された次世代のバージョン管理システムとして開発されました。基本的なコマンドはCVSと共通しています。複数人の開発者が共同でひとつのソフトウェアの開発にあたるときなどに、ドキュメント及びソースコードなどを管理するのに使用されます。

SVNで使用した一部ファイルをGitHubへエクスポートしたい gitファイル変換あたりで詰まっている

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 818

Hirasaking

score 23

SVNに取り込む方法を参考にしていますが、エラーが出ており対応方法がわかっていません。

やってみた内容を記載しているので、「違うよ!」という点あれば是非是非アドバイスをいただきたいです。

 やりたいこと

  • SVNで過去に管理してたファイル(ローカル)をSVNに取り込みGitへエクスポートしたい。
  • 管理ファイル全体ではなく、1つのリポジトリのみ

 ファイルの内容

ファイルは2つ
外注先から納品されたファイルのため全て保存する方針

  • 20GB ほどのdumpファイル
  • 15BG ほどのソースと思われるファイル
    イメージ説明
    イメージ説明

 作業環境

  • PCはMACを使用しています
  • ストレージに保存されていたファイルを使用
  • GituHub環境はすでに使用中
  • SVNサーバ環境は構築していない
  • SVNはローカルにインストール済
$ svn --version
svn, version 1.9.4 (r1740329)
   compiled Nov  6 2017, 18:06:35 on x86_64-apple-darwin16.1.0

Copyright (C) 2016 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository access (RA) modules are available:

* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - using serf 1.3.8 (compiled with 1.3.8)
  - handles 'http' scheme
  - handles 'https' scheme

The following authentication credential caches are available:

* Plaintext cache in /Users/user/.subversion
* GPG-Agent
* Mac OS X Keychain

 作業フォルダ構成

svn(フォルダ)
┗ svn.dump
┗ tar zxvf ファイル名.tar.gz

 参考にする記事

以下記事を参考に作業を試みています
https://qiita.com/yakumo/items/b8531f44671d6781a2d3

↓記事内のこちらは無くても問題なさそうなのでやっていません
※Subversionアカウント名->gitメールアドレスの読み替えファイルを作る

 作業記録

ストレージに保存されていたファイル(過去にSVNで管理していた)をローカルへダウンロード

 ファイルの解凍

tar zxvf ファイル名.tar.gz


イメージ説明

 作業フォルダ構成

svn(フォルダ)
┗ svn.dump
┗ repos (フォルダ)

 subversionリポジトリ作成

svnadmin create svnimport

 作業フォルダ構成

svn(フォルダ)
┗ svn.dump
┗ repos (フォルダ)
┗ svnimport (フォルダ)

 ダンプファイルのロード

svnadmin load svnimport/ < svn.dump
$ svnadmin load svnimport/ < svn.dump
<<< Started new transaction, based on original revision 1
     * editing path : ProjectName ... done.
     * editing path : ProjectName/branches ... done.
     * editing path : ProjectName/tags ... done.
     * editing path : ProjectName/trunk ... done.
     * editing path : CourseEditor ... done.
     * editing path : CourseEditor/Assets ... done.
     * editing path : CourseEditor/Assets/Project Course Editor ... done.
     * editing path : CourseEditor/Assets/Project Course Editor/Plugins ... done.
     * editing path : CourseEditor/Assets/Project Course Editor/Plugins/PlayerPrefs.cs ... done.
     * editing path : CourseEditor/Assets/Project Course Editor/Plugins/PlayerPrefs.cs.meta ... done.
     * editing path : CourseEditor/Assets/Project Course Editor/Plugins.meta ... done.
     * editing path : CourseEditor/Assets/Project Course Editor/Scene ... done.



~~~~~長いため省略~~~~~



------- Committed revision 7596 >>>

<<< Started new transaction, based on original revision 7597
     * editing path : ProjectName/trunk/CheckSheet/Changes_V1_2(内部用資料).xlsx ... done.

------- Committed revision 7597 >>>

<<< Started new transaction, based on original revision 7598
     * editing path : ProjectName/trunk/Patch/Banner/ProjectNam_JP.bsf ... done.

------- Committed revision 7598 >>>

<<< Started new transaction, based on original revision 7599
     * editing path : ProjectNam/trunk/ProjectNam/Sources/GameObjects/BOSS/BossTaskCheck.cpp ... done.

------- Committed revision 7599 >>>

svnimportリポジトリにファイルが追加されたことを確認

 ローカルにSubversionサーバーを立てる

参考に記事に書いてあった内容をそのまま実行

svnserve -d -R --foreground --root svnimport/


動いているか確認

$ ps aux|grep svn
user        46101   0.0  0.1  2444560   8668 s000  S+   12:31PM   0:00.04 /Library/Developer/CommandLineTools/usr/bin/svnserve -d -R --foreground --root svnimport/
user        94027   0.0  0.0  2450212   1740 s001  R+    3:48PM   0:00.00 grep svn

新規ターミナルを開く

 作業フォルダ構成

svn(フォルダ)
┗ svn.dump
┗ repos (フォルダ)
┗ svnimport (フォルダ)

 gitリポジトリ生成

$ git svn init -s --prefix=svn/ svn://localhost/ svngitexport/

Initialized empty Git repository in /Users/user/Documents/svn-gitexport/.git/

 作業フォルダ構成

svn(フォルダ)
┗ svn.dump
┗ repos (フォルダ)
┗ svnimport (フォルダ)
┗ svngitexport (フォルダ)

作成したリポジトリに移動

$ cd svngitexport

 Subversionリポジトリ内容をgitに変換(取込)

git svn fetch

この時点でsvngitexportリポジトリを確認しましたが、ファイルは見当たりません
.gitフォルダのみ作成されています

 git clone を試す

git svn clone svn://localhost/
r3000 = 13557ea4bfcf6a2fb0ea5459632b85cee3c0e736 (refs/remotes/git-svn)
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: The last gc run reported the following. Please correct the root cause
and remove .git/gc.log.
Automatic cleanup will not be performed until the file is removed.

warning: There are too many unreachable loose objects; run 'git prune' to remove them.

gc --auto: command returned error: 255

 絶対パスに変更してgit svn clone 

git svn clone file:///home/user/repos


ファイル数が多いことでのエラー?

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: The last gc run reported the following. Please correct the root cause
and remove .git/gc.log.
Automatic cleanup will not be performed until the file is removed.

warning: There are too many unreachable loose objects; run 'git prune' to remove them.

gc --auto: command returned error: 255

 この記事を参考に対応

https://takanosho.wordpress.com/2016/01/21/fix-running-git-gc-on-every-merge/

$ git gc –-aggressive
usage: git gc [<options>]

    -q, --quiet           suppress progress reporting
    --prune[=<date>]      prune unreferenced objects
    --aggressive          be more thorough (increased runtime)
    --auto                enable auto-gc mode
    --force               force running gc even if there may be another gc running
$ git gc
Nothing new to pack.


できていない

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • miyabi-sun

    2018/02/23 18:12

    SVNを使ってた時代は私はTortoiseSVNにおんぶ抱っこでしたので、あまりちゃんとした回答は出来ないのですが、TortoiseSVNを使ってローカルに立ち上げたSVNサーバへ接続して何処か適当なディレクトリにダウンロードしてはいかがでしょうか?

    キャンセル

  • miyabi-sun

    2018/02/23 18:15

    そして、そもそもSVNの履歴全てをGitに持っていかなければならないのでしょうか?最新だけでよくないです?Gitから削るファイルもあるから完全には戻れませんよね。めぼしい幾つかのバージョンの状態にロールバックしながら手作業でGitに登録していくという手法もありだと思います。

    キャンセル

  • Hirasaking

    2018/02/28 10:21

    アドバイスありがとうございます。SVNの構築からが難しいため今回の方法にしています。

    キャンセル

回答 1

checkベストアンサー

+2

参考にされているサイトを見てみましたが、

svn => git 変換時に file:// は使用できないので、サーバーをローカルに立ち上げる。

これは、この事ですかね。

要はsubversionのdbのバージョンの違いであるから、かならずしもできないという話ではなさそうなので、とりあえずサーバを立てずに、「svn://localhost」ではなく「file://<レポジトリの絶対パス>」で試してみてはいかがでしょうか。

もしダメでも、

  1. 元のsvnレポジトリを「svnadmin dump」してバックアップを取る。
  2. 新しいsvnレポジトリを作り、そちらで「svnadmin load」をしてバックアップを復旧する。

としてレポジトリを作りなおせば、いけそうな気もしなくはないです。ダメ元でも良ければ、試してみてください。
(数GBもあると時間がかかると思いますが)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/01 11:00

    アドバイスありがとうございます。
    git svn clone svn://localhost/ を実行するという意味でよかったでしょうか?

    やってみたところ、エラーが発生し、どうすれば良いのかわからず調べています

    キャンセル

  • 2018/03/01 11:13

    「git svn clone file://<レポジトリへの絶対パス>」を実行してください。
    (「レポジトリへの絶対パス」は、「/home/user/repos」であれば「file:///home/user/repos」になります)

    キャンセル

  • 2018/03/01 13:35

    エラーメッセージを見る限り、もはや「svn:」や「file:」などのurlの問題じゃなさそうですね。
    エラーメッセージで検索したら以下のページが引っかかったので、参考にしてみてください。

    https://takanosho.wordpress.com/2016/01/21/fix-running-git-gc-on-every-merge/

    (調べてみると、gcの警告メッセージのようですから、もしかすると移行自体はすでにできているかもしれませんが)

    キャンセル

  • 2018/03/01 16:35

    ありがとうございます、GitのDocumentationを見ると、ファイル数の問題なのかもしれません。いただいた記事を試していますが、、詰まってます。

    キャンセル

  • 2018/03/01 17:24

    なんか、git-gcの結果がおかしいような気がしますが。(正しく「--aggressive」オプションを指定しているのにusageが出力されたり)

    どちらかと言えば「git prune」の方が重要な気がします。
    「warning: There are too many unreachable loose objects; run 'git prune' to remove them.」ですから、無駄な物が沢山残っている、と言っているようです。
    とは言うものの、私もgcやpruneはやったことはないので、ご自身でもよく理解してから実行してください。
    (一応探すと、こんな所が参考になるような気がします)
    http://za.toypark.in/html/2008/01-29.html

    キャンセル

  • 2018/03/02 18:54

    アドバイスありがとうございます。
    色々試した結果なんとか解決できそうです。

    キャンセル

同じタグがついた質問を見る

  • Git

    1669questions

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

  • GitHub

    1063questions

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

  • SVN

    98questions

    SVNは、CollabNet社が開発したソースコードなどを管理する集中型のバージョン管理システムです。 Subversionとも呼ばれ、CVSの問題点を解決すべく開発された次世代のバージョン管理システムとして開発されました。基本的なコマンドはCVSと共通しています。複数人の開発者が共同でひとつのソフトウェアの開発にあたるときなどに、ドキュメント及びソースコードなどを管理するのに使用されます。