18

私は git-svn を使用して svn リポジトリを操作しています。バイナリを含む多くのレガシーが含まれているため、レポ全体は必要ありません。一部のディレクトリのみを追跡しています。

これが私の現在の.git/configで、正常に動作しています。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = https://svn.example.com/repository
    fetch = trunk/Python:refs/remotes/trunk
    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*
    branches = branches/{active}/Python/:refs/remotes/*

次に、新しいブランチを追加します。

    branches = branches/{fuze_node}/:refs/remotes/*

しかしgit svn fetch、新しいブランチを実行すると、git には表示されません。行が構成にないかのように機能します。


これは新しい svn-remote で実行できることはわかっていますが、その道をたどりたくありません。

4

2 に答える 2

23

すべての svn-remote について、git-svn は最新のフェッチされたリビジョン.git/svn/.metadataファイルに保存します。その値よりも小さいリビジョンを取得することはありません。そのため、config に追加したブランチをフェッチしません。git-svn は、fuze_nodeブランチが既に変換されていると考えています。

ただし、リポジトリ全体を再度クローンしなくても、このブランチを取得できます。

  1. 取得する必要があるすべてのブランチを含む別の svn-remote を追加します。
  2. 古い svn-remote を削除します。
  3. 実行git svn fetch -R newer-svn-remoteして、追加されたブランチからリビジョンを取得します。

設定は次のようになります。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
# [svn-remote "svn"]
#    url = https://svn.example.com/repository
#    fetch = trunk/Python:refs/remotes/trunk
#    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*
#    branches = branches/{active}/Python/:refs/remotes/*
[svn-remote "newer-svn-remote"]
    url = https://svn.example.com/repository
    fetch = trunk/Python:refs/remotes/trunk
    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*
    branches = branches/{active}/Python/:refs/remotes/*
    branches = branches/{fuze_node}/:refs/remotes/*

古い svn-remote とまったく同じブランチ マッピングを指定する必要があることに注意してください。

    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*

つまり、refs/remotes/*は引き続きマッピングの右側にある必要があります。そうしないと、git-svn は既に変換されたコミットを検出できず、もう一度フェッチしようとします。


実際には、同じことを達成する別の方法があります。ただし、内部の git-svn ファイルを操作する必要があります。

必要なブランチを追加してファイル.git/configを更新するだけで、最新のフェッチ済みリビジョンが 0 になります。.git/svn/.metadata

[svn-remote "svn"]
    reposRoot = https://svn.example.com/repository
    uuid = 8a6ef855-a4ab-4527-adea-27b4edd9acb6
    branches-maxRev = 0
    tags-maxRev = 0

その後、git svn fetch必要なリビジョンのみを取得します。

于 2012-11-20T16:15:10.833 に答える