2012-02-09 14 views
0

EDIT:私はこの質問が以前に尋ねられたのを見る! git-svn: reset tracking for master適切な権限を持つ人がおそらくこれを複製として閉じることができます。Git-SVN mergeがトランクへの私のリンクを失った

私はgit-svnを使用しています。私は最近、SVNのブランチを追跡しているgitのブランチで作業を終えました。支店で働いているうちに、次の2つのコマンドを使用していました。

$ git svn rebase 
$ big svn dcommit 

すべてが順調でした。 gitの "master"はsvn/trunkを追跡していて、gitの "myBranch"はsvn/branches/myBranchを追跡していました。私はgitの

$ git checkout master 
$ git merge myBranch 

でローカルにすべてをマージした後、しかし、私は...押しに行って、そのマスターは、SVN /トランクにプッシュするだろうと想定しました。しかし、それはしませんでした。代わりに、 "マスター"は今svn/branches/myBranchにプッシュします。どういうわけか、 "myBranch"を "master"にマージすると、 "master"のトラッキングが変更されました。

私はおそらく、この間違ったをやっている - しかし、私は

$ git svn dcommit remotes/trunk master 

...トランクに明示的に「プッシュ」しようとしたが、その構文が失敗し、今私はSVNで

$ Committing to http://<repo>/trunk ... 
dcommitted on a detached HEAD because you gave a revision argument. 
The rewritten commit is: b461234... 

を持っていますトランクはまだ更新されません。

私はgitでマージして、それをSVNにプッシュしますか?私はガイドhereに従っていたので、通常のgit構文とマージできます。私がマージするブランチを追跡していない理由を説明しています。

私はコマンドラインと並行して使用するgit-towerも持っています。 "プッシュ"またはdcommitするためのドロップダウン内のすべてのリモートブランチを表示しますが、私はsvn/myBranchから選択を変更することはできません...おそらく私ができないことを示唆していますか? masterがあなたのsvnリモコンを追跡している場合

答えて

0

、あなただけ行うことができます。

git svn dcommit 

あなたはmasterにしている間。 --dry-runを使ってあなたのコミットがどこに向いているか確かめてください!それが壊れていた場合は、.git/configを編集して、あなたのsvn-remoteエントリまで修正することができます。

[svn-remote "svn"] 
    url = svn+ssh://some.machine.net/svn/path/to/tree 
    fetch = trunk:refs/remotes/trunk 

または何でもそれはする必要がありますが。

0

いいえ、gitマージをSubversionにコミットすることはできません。

あなたが与えたリンクからbranching issues with git svnについては、この段落を読む:

をあなたがGitのワークフローに慣れになったとき、あなたはおそらく、トピックブランチを作成し、それらの作業を行い、その後でそれらをマージしますgit svnを使ってSubversionサーバにアクセスする場合は、ブランチをまとめてマージする代わりに、1つのブランチに作業をリベースすることができます。リベースを好む理由は、Subversionは線形履歴を持ち、Gitのようにマージを扱わないため、git svnはスナップショットをSubversionコミットに変換するときに最初の親だけに従います。

マージされた履歴を持つブランチでdcommitを実行すると、Gitプロジェクトの履歴を見ると、実験ブランチで行ったコミットのいずれも書き換えられません。単一マージコミットのSVN版。

他の誰かが作業しているクローンは、その中に押しつぶされたすべての作業とのマージコミットです。どこから来たのかコミットされたのかについてのコミット・データは表示されません。

+0

私が含まれているリンクによると、私は以下のことが誤解を招いていたと思う。限られているが、テキストがまだ機能することを暗示しているからだと思う....今、オペラブランチをトランクあなたのマスターブランチ)、通常のgitマージでそうすることができます。しかし、(-mを使って)説明的なコミットメッセージを提供する必要があります。そうしないと、マージで便利なものの代わりに "Merge branch opera"と表示されます。 –

+0

git mergeを使ってこの操作を行っていても、MergeはSubversionよりもはるかに簡単です(Gitは自動的に適切なマージベースを検出するため)、これは通常のGitではありませんマージコミット。このデータを、複数の親を追跡するコミットを処理できないSubversionサーバにプッシュバックする必要があります。だから、あなたがそれを押し上げると、一回のコミットの下で別のブランチのすべての仕事を潰したような単一のコミットのように見えます。 –

関連する問題