18

大きいが線形のsvnリポジトリをgitに移行しようとしています。svnリポジトリには標準のレイアウト(トランク、ブランチ、タグ)がありません...トランクのあるディレクトリは1つだけです。

Ubuntu 12.4 LTS、git1.7.9.5。

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel/COAWST --authors-file=../users.txt COAWST

...

    D   WPS/metgrid/storage_module.F
    D   WPS/metgrid/process_domain_module.F
W: -empty_dir: WPS/metgrid/gridinfo_module.F
W: -empty_dir: WPS/metgrid/input_module.F
W: -empty_dir: WPS/metgrid/interp_option_module.F
W: -empty_dir: WPS/metgrid/module_date_pack.F
W: -empty_dir: WPS/metgrid/process_domain_module.F
W: -empty_dir: WPS/metgrid/storage_module.F
r635 = c19181c9718e701788b540ed0cc559e4fbddf413 (refs/remotes/git-svn)
    M   Tools/Docs/COAWST_User_Manual.doc
r636 = 1b7849c3e5a20856c9ddb909a5f53ddf8501ad33 (refs/remotes/git-svn)
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 14143, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (14039/14039), done.
Writing objects: 100% (14143/14143), done.
Total 14143 (delta 8350), reused 0 (delta 0)
fatal: refs/remotes/trunk: not a valid SHA1
update-ref refs/heads/master refs/remotes/trunk: command returned error: 128

-s、-t Trunk、-t COAWST、-preserve-empty-dirs(やりたい)、-no-meta-data(Pro Gitごと)の組み合わせでバリアントを試しました...常に同じ最終エラー。

提案をありがとう!

4

5 に答える 5

13

これが私に起こるたびに、Gittrunkは Subversion からコミットを取得できませんでした:

fatal: refs/remotes/trunk: not a valid SHA1

理由:

  • Subversion レイアウトが標準ではない場合 (trunk-tags-branches) を指定しませんでした。具体的にはエラーについて - あなたにはありません/trunk
  • 少なくとも 1 つのコミットをトランクにまたがるのに十分古いリビジョンからフェッチしませんでした (たとえば、-rオプションを使用)。
  • 上記の組み合わせ。
于 2014-05-07T18:19:06.120 に答える
12

正しいコマンドを実行したと思います。または、実行することもできます

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel --trunk=COAWST --authors-file=../users.txt COAWST

git-svnは、いずれの場合も作業をほぼ終了します。それがしようとする唯一のことは、トランクを指すように「マスター」を設定することです。いくつかのバグのため、間違った値に設定しようとしますが、手動で実行できます。

$ git update-ref refs/heads/master refs/remotes/git-svn

それでも問題が解決しない場合は、次の3つの手順でSubGitを使用してリポジトリを変換してみてください。

$ subgit configure path/to/svn/repository
#edit path/to/svn/repository/conf/subgit.conf to set trunk = COAWST:refs/heads/master and authorsFile = path/to/users.txt
$ subgit install path/to/svn/repository

変換されたリポジトリはpath/to / svn / repository / conf/.gitにあります

于 2012-07-27T19:52:08.750 に答える
4

今日も同じ問題がありました。

問題はおそらく、SVN リポジトリにトランク ディレクトリがないことです。標準のトランク、タグ、およびブランチのディレクトリは、SVN ではオプションのようです。しかし、git-svn は移行時にこれについて知る必要があります。

一部のディレクトリがそこにあるが、名前が異なる可能性もあります。(たとえば、トランクは「trunk」ではなく「project」という名前にすることができ、ブランチは通常どおり「branches」という名前にすることができ、タグが欠落している可能性があります。または、「trunk」を「Trunk」という名前にすることもできます。)

  • これらの標準ディレクトリが SVN リポジトリになく、すべてがリポジトリのルートに配置されている場合、解決策は単純に標準の svn ディレクトリを複製しないことです。ルートをクローンするだけです。

  • それらが存在する場合 (またはそれらの一部が存在する場合) が、異なる名前である場合、git-svn にこれらの名前を通知する必要があります。

Tortoise Gitを使用して SVN から GIT に移行しました。TortoiseGit では、svn リポジトリからクローンを作成し (そうです!)、[SVN リポジトリから] チェックボックスをオンにすることで実行されます。

  • SVN リポジトリにトランク、タグ、またはブランチ ディレクトリがない場合は、クローン ダイアログの [SVN リポジトリから] セクションで、[トランク]、[タグ]、および [ブランチ] チェックボックスをオフにします。

  • 標準のディレクトリが存在するが、通常とは異なる名前が付けられている場合は、それらをチェックしたままにして、使用されている名前をその横のテキスト ボックスに書き込みます。

    (コマンドラインから、これは -T、-t、および -b スイッチで実行できます 。http://www.sailmaker.co.uk/blog/2013/05/05/migrating-from-svn-to-gitを参照してください。 -preserving-branches-and-tags-3/ 「非標準 SVN レイアウト」の下)。

(これらは私が遭遇した2つのケースでした-より複雑なケースが存在する可能性があります。トランク、タグ、ブランチディレクトリのいずれも持たないSVNリポジトリがいくつかあり、これら3つのチェックボックスのチェックを外すと機能しました。トランクディレクトリが「プロジェクト」と呼ばれるケースもありました「トランク」ではなく " ですが、ブランチ dir には通常どおり名前が付けられ、タグ dir はありませんでした。タグのチェックボックスをオフにして、トランク ディレクトリの名前を入力すると、そのケースが機能しました。)

于 2013-12-21T23:23:43.370 に答える