5

次のようなフラットな svn リポジトリがあります。

my_repo/
├── file1.c
├── file2.c
├── file3.c
└── README

このリポジトリにはブランチもタグもありません。私がやろうとしているのは、それを git リポジトリに変換してコミット履歴を維持することだけです。

私が試してみました:

git svn clone --trunk=/ -A users.txt svn+ssh://user@svn.example.com/projects/my_repo dest_dir

これはうまくいくと思いましたが、ナビゲートしdest_dirて実行するとgit svn fetch、何も取得されないようです。git log利回りの使用:

fatal: bad default revision 'HEAD'

使用すると、次のようsvn checkout svn+ssh://user@svn.example.com/projects/my_repo に返されます。

A    my_repo/file1.c
A    my_repo/file2.c
A    my_repo/file3.c
A    my_repo/README
Checked out revision 57.

したがって、リポジトリは有効でアクセス可能です。

subgitこのエラーが発生するなど、さまざまなツールを試しましたがsvn: E170003: 'stat' not implemented、これは、リポジトリをホストしているサーバーが古いバージョンのサブバージョンを使用しているためだと思います。サーバーを制御できないため、更新を実行できません。

svn2gitコマンドを使用して、 も使用してみました

svn2git svn+ssh://user@svn.example.com/projects/my_repo --rootistrunk -authors users.txt --verbose

しかし、これは私に別のエラーを与えていました:

E: 'svn+ssh:/user@svn.example.com/projects/my_repo' is not a complete URL and a separate URL is not specified command failed

これは私を困惑させ、なぜそれが機能しないのかわかりません。基本的に、履歴を維持しながらsvnリポジトリをgitリポジトリに変える方法を考えていました。誰かが私を助けてくれるか、正しい方向に向けてくれることを願っています。この単純なレポを git に転送するのがこんなに難しいとは思いもしませんでした!

ありがとう

4

3 に答える 3

2

私も同じ問題を抱えていました。標準の svn リポジトリではありません: トランクなし、タグなし、ブランチなし。svn2git のすべての可能なオプションをチェックしましたが、成功しませんでした。svn2git は git svn の ruby​​ ラッパーにすぎないので、直接 git svn を試してみましたが、問題ありませんでした。これが私がやったことです。

空の git ディレクトリを初期化し、svn リポジトリ パスと、トランク、タグ、およびブランチの相対パスを指定します。私の場合、それは/です。私はそれらのどれも持っていません。

1. git svn init http://svnmydomain.com/urlpart/projectname --trunk=/ --tags=/ --branches=/

svn リポジトリがパスワードで保護されている場合、上記のコマンドにユーザー名とパスワードの引数を指定する必要がありますが、ほとんどの場合、少しバグがあるため機能しません。代わりに、現在のフォルダーで svn checkout を実行します。git svn は svn cash を使用し、パスワードを要求しません。

git config が正常であることを確認します。タイプ

2. git config --list

次のように表示されます。

svn-remote.svn.url=http://svnmydomain.com/urlpart    
svn-remote.svn.fetch=urlpart/projectname:refs/remotes/origin/trunk
svn-remote.svn.branches=urlpart/projectname/*:refs/remotes/origin/*
svn-remote.svn.tags=urlpart/projectname/*:refs/remotes/origin/tags/*

git config が正しくない場合は、実行して手動で修正します

git config <key> <value>

git config に問題がなければ、svn からデータを取得して git サーバーにプッシュする必要があります

3. git svn fetch
4. git remote add origin git@gitdomain:url/gitproject.git
5. git add .
6. git commit -m "merge from svn"
7. git push origin master

一部の人々が引き続き svn で作業する場合、svn を git と常に同期する必要があります。それを行うには、次のように入力します。

8. git svn rebase
9. git push origin master 
于 2016-11-25T12:46:12.583 に答える