私はgit-svn
しばらくの間、会社のsvnリポジトリとの通信に大きな問題を起こすことなく使用してきました。
今日、「頭痛」の部分は劇的に変化しました。
私はmaster/trunk
かなり排他的に取り組んでおり、これらの変更セットのほとんど(すべてではありません!)を既存のsvn-branchにマージする必要がありました。 svn-branch。
基本的にこれ:
-----------1--1-----1--------1--1--1--- master/trunk
\
\
2--2--2--2--2 versioned-release
これになるべきだった:
-----------1--1-----1--------1--1--1--- master/trunk
\
\
2--2--2--2--2 versioned-release
\
\
1--1--1--1--1--1 new-versioned-release
に含めるべきではないコミットと、それぞれのブランチからの必要なコミットはどこに
new-versioned-release
ありx
ますかx
。
だから私は次のことをしました:
git checkout -b versioned-release-svn remotes/versioned-release
git svn branch new-versioned-release -m "Preparing for merge of XXX"
git checkout -b new-versioned-release-svn remotes/new-versioned-release
git cherry-pick ...
毎回1
、途中で競合を解決します。
リポジトリの正しいブランチを実際にターゲットにすることを確認したかったので、実行しましgit svn dcommit --dry-run
たが、エラーや警告は発生しませんでしたが、教えてくれました…</ p>
Committing to svn://username@$repo-host/$repo-name/$path/branches/new-versioned-release ...
…その後にdiff-tree
数行が続きます。
--dry-run
だから私はコミットの途中で
省略しようとしましたが…</p>
Item already exists in filesystem: File already exists: filesystem '/data/subvroot/$repo-name/db', transaction '20856-g3m', path '/$path/branches/new-versioned-release/some-directory' at /usr/libexec/git-core/git-svn line 862
…そしてステージングされていない変更の束。
明らかなことは別として—「WTF?!?」そして、「私がしたことすべてを失うことなく、どうすればこの混乱から抜け出すことができますか?」—2つの質問があります。
- 以前に戻ったと仮定すると
git svn dcommit
、ローカルブランチのdcommitを計画された目的地に移動するにはどうすればよいですか? - 今では、これが私が望んでいたことを達成するための正しい方法ではなかったことは明らかなようです…しかし、代わりに、どのようにそれを行うべきでしたか?
エラーメッセージで見つけたものはすべて、どういうわけか私の状況に似ていましたが、これまでのところ、この他のスタックオーバーフローの質問であり、「メタデータディレクトリを吹き飛ばす」という提案された解決策は私に.git/svn
はあまり共鳴しません… </ p>