web-dev-qa-db-ja.com

Git-SVN:集中型SVNサーバーからGitリポジトリを更新する

私は、誰もがSVNを中央サーバーとして使用し、誰もがそのサーバーで行った変更をプッシュするプロジェクトに取り組んでいます。ローカルでGitを使用したいのですが、git svnは初めてです。 git svn cloneを使用してリポジトリのgit svn clone -r HEAD https://svn.repo/app/branchを実行しました。gitを使用して更新を行います。

「git pull like」コマンドが必要ですが、SVNサーバーリポジトリの特定のリビジョンからプルする必要があります。また、SVNサーバーリポジトリの特定のリビジョンからフェッチする「fetch like」コマンドはありますか?

クローンプロジェクトに.svnフォルダがなく、git remoteで何も返されません。ただし、git config -lを実行してSVNサーバーのURLを取得したので、どういうわけか私はSVNサーバーとリンクしています。フェッチまたはプルする方法はわかりません。

ありがとう!

23
Jacob Krieg

Git経由でSubversionリポジトリを操作する最良の方法:

  1. git svn init -s https://svn.repo/app/ myrepohttps://svn.repo/app/ の下で、リポジトリに標準の/trunkbranchesおよびtagsサブディレクトリが含まれていると仮定します
  2. コミットがフェッチされなくなるまでmyrepoでgit svn fetchを実行します(Windowsではかなり時間がかかり、場合によっては中止されることがあります)。
  3. 特定のSubversionブランチまたはトランクをgit checkout -b trunk remotes/trunkでチェックアウト

その後、すべてのSubversionコミットとブランチを含むGitリポジトリを参照、ハッキング、コミットするだけです。

  • SVNから新しいコミットを取り込むには、git svn rebaseを使用します
  • ローカルコミットをSVNにプッシュするには、git svn dcommitを使用します

特定のSubversionリビジョンにジャンプするには、git logを介して履歴を参照し、対応するSubversionコミットをミラーリングするコミットを検索するだけです。コミットメッセージのgit-svn-id:行でSubversionのリビジョンを簡単に見つけることができます。 git checkout <commithash>を使用して、そのバージョンを明示的にチェックアウトします。

44
bentolor

良いスタート:

新しいsvn commitをローカルリポジトリにフェッチするには:git svn rebase

ローカルコミットをSVNにプッシュするには:git svn dcommit

おそらくgit stashおよびgit stash pop、作業コピーにコミットされていない変更がある場合に上記の2つのコマンドを使用する前。

12