1

背景

私たちのチームはsvnサーバーに接続し、特定のブランチ(svnトランクではない)で作業する必要があります。さらに、トランクを取得してそれらをマージする必要もあります。

ブランチに接続されたローカルgitリポジトリ( "svn + ssh ... project / branchs / X")をセットアップしました。

次に、トランクを新しいsvn接続( "svn + ssh ... project / trunk")として手動で追加し(svnトランクの新しいリモートターゲットを.git / configに追加しました)、ブランチの名前を次のように変更しました。 :

master(project / branchs / Xに接続)はmaster-Xに名前が変更されました

プロジェクト/トランクに接続されているブランチの名前がmaster-trunkに変更されました。

質問

master-Xローカルブランチをgit svn dcommit使用すると、新しい「master」ブランチが作成され、次の場合と同じ効果が得られます。

git svn dcommit
git co master-X -b master

マスターブランチが再作成されないようにすることはできますか?

(作成するたびに、後で手動で削除します)。

編集

私の.git/configは次のようになります。

# original/default configuration settings skipped for brevity

[svn-remote "svn"]
    url = svn+ssh://...project/branches/X
    fetch = :refs/remotes/git-svn

[svn-remote "svn-trunk"]
    url = svn+ssh://...project/trunk
    fetch = :refs/remotes/git-svn-trunk

最後の3行は私が追加したものです。

4

1 に答える 1

1

これは古いGitの動作であり、最近のGitリリースで修正されています。Git 1.7.12より新しいものは、マスターブランチを自動的に再作成しなくなりました。実行git --versionして、現在実行しているGitのバージョンを取得できます。

オペレーティングシステムに付属しているバージョンが1.7.12より前の場合(Debian、RHEL、Cygwinシステム間で簡単にアクセスできる最新のものは1.7.9)、これはあまり役に立ちません。

ただし、必要に応じて、自分で変更を加えることができるはずです。git-svnシステムのまたはgit-svn.perlシステム上(私の場合は)のコピーを見つけて/usr/lib/git-core/git-svn、次の変更を加えます。

  • 以下Git::SVN::init_vars()で、行を閉じ中括弧の前に移動してpost_fetch_checkout();、コードのビットが次のようになるようにします。

    Git::SVN::init_vars();
    eval {
            Git::SVN::verify_remotes_sanity();
            $cmd{$cmd}->[0]->(@ARGV);
            post_fetch_checkout();
    };
    fatal $@ if $@;
    exit 0;
    
  • サブルーチン内post_fetch_checkout…</p>

    • 開始行の上に次の行を追加しますmy $gs =

      return if verify_ref('HEAD^0');
      
    • 次のようになっている行を削除します。

      return if verify_ref('refs/heads/master^0')
      
    • 次の行を置き換えます。

      my $valid_head = verify_ref('HEAD^0');
      command_noisy(qw(update-ref refs/heads/master), $gs->refname);
      return if ($valid_head || !verify_ref('HEAD^0'));
      

      次のように:

      command_noisy(qw(update-ref HEAD), $gs->refname);
      return unless verify_ref('HEAD^0);
      

上記の変更は、Gitソースコードでこの動作を変更したパッチを適用します。あなたはそれをあなた自身のために見ることができます:関連するコミットはMarcinOwsianyによるv1.7.11.2-250-ge3bd4ddです。

于 2013-03-21T11:39:08.150 に答える