5

通常の svn の代わりに、リポジトリ システムとして git を使用してテストしています。常に必要な svn リポジトリが 1 つあります。svn では、このリポジトリを svn propset と svn:externals としてリンクします。これにより、頻繁に使用される特定のリポジトリのグローバル コピーが実際に 1 つだけ存在することが保証されます。

git リポジトリができたので、svn:externals を使用する場合と本質的に同じ方法で、SVN リポジトリをそれにリンクしたいと思います。私はこれを行うことにある程度成功しました。私はgitを初めて使用します。無知を許してください。

純粋な git リポジトリ ( でクローンを作成しgit clone gitmaster@address.org:mygitrepoます) では、以下を使用しました。

git svn clone svn+ssh://svnowner@hostname.org/path/to/mysvnrepo mysvnrepo

他の svn リポジトリのコピーを取得します。git svn rebaseこれはうまく機能します。mysvnrepo ディレクトリから SVN リポジトリの新しいリビジョンを取得し、 から変更をコミットできますgit svn dcommit

これを私が使用したメインの git リポジトリに結合するには:

git add mysvnrepo
git commit mysvnrepo
git push

私が抱えている問題は、git リポジトリを別の場所に (再び を使用してgit clone gitmaster@address.org:mygitrepo) 複製すると、すべてのファイルを含む mysvnrepo ディレクトリを取得しているときに、SVN リポジトリと対話できないことです。git svn rebase の後、「作業ツリーの履歴から上流の SVN 情報を特定できません」というエラーが表示されます。関連している可能性があります。別の場所に複製すると、mysvnrepo ディレクトリに .git フォルダーがありません (これは、svn 情報が元のリポジトリに格納されている場所です)。

私はこの問題を少し調べましたが、それへのすべての参照は、最初にsvnリポジトリを機能させるのに問題があるようですが、私の問題は別のユーザーのためにそれを機能させることです.

おそらく私の問題は、svnリポジトリをgitリポジトリに追加/コミット/プッシュする方法ですか? つまり: git add mysvnrepo; git commit mysvnrepot; git push; これを行う正しい方法は?

編集:より多くのコンテキストを提供するために改善されました

4

1 に答える 1

2

あなたがやろうとしているように見えるのは、svn:externals. git svn含まれているリポジトリが;で作成されたのはたまたまです。そのリポジトリを別のリポジトリに含める方法には実際には影響しません。

他の一般公開されている場所に含めたい git リポジトリを作成する必要があります。その後、 git submoduleまたはgit subtreeを使用して含めることができます。どちらもまったく同じようには機能しませんsvn:externalsgit subtreeただし、git リポジトリの他のユーザーにとっては初心者にやさしいかもしれません。

使用している言語とソフトウェアに応じて、頻繁に使用されるリポジトリ用に別の git リポジトリを作成し、それを独自のスタンドアロン ライブラリ、jar ファイル、または何を持っているかとして構築することも検討できます。

上記は、完全に git に切り替えることを計画している場合にのみうまく機能します。あなたのチームの一部がしばらくの間 S​​VN で作業を続ける予定である場合、git substreeまたはgit submoduleあなたのために働かない場合。

代わりに、 でsvn:externals をシミュレートするためのこの質問git svnを見てください。

全員が git を使用できるように設定するには、 git svn man ページの「基本的な例」の最後の例に従ってください。git cloneこれにより、すべてのコマンドを実行する代わりに、ローカルでいくつかのコマンドを実行できるようになりますgit svn clone

于 2012-10-17T23:46:39.387 に答える