2012-03-11 15 views
1

私はGit/GitHubの "クローン"と同期しているSVNのメインリポジトリを持っています。私はSVNに何かをするたびに、私は私のGitのコンソールで次のコマンドを実行します。Gitリポジトリをリセットし、SVNからのソースを新しくチェックアウトするには?

git svn rebase 
git push --force [email protected]:.../ 

この設定(方法を知っている...)を扱うとき、私は頻繁にミスをしています。これは、Gitの知識が不足しているために解決できない、多くのエラーやマージ、stashing、commit、addonなどにつながります。ですから、Gitリポジトリの不要な変更をすべて元に戻し、SVNトランクでコミットされているすべての方法を上書きするにはどうすればいいでしょうか?私は今までSVNにコミットしたい。 Git/GitHubはコピーでなければなりません。

私は私の現在の問題のために実行するための回避策がこのであることを考え出し:

git svn rebase 
git add . 
git rebase --continue 
git push --force [email protected]:.../ 

Gitはもはや文句を言わないであろうように、これら二つの追加の手順は、私が作業を継続することができます。しかし私は変わった地方の変化を保ちたくない。言い換えれば、次のようなコマンドがあります:

git svn "override and update" 
+0

Gitは複雑すぎます。間違いがあると時間を無駄にします。あなたはバザールを見てください。http://bazaar.canonical.com/en/ –

+0

@YvesMartin:さらに別のリビジョン管理システムを使用することはできません –

+0

実行しているエラーを明確にしてください。 remotes/...ブランチはあなたの混乱の影響を受けてはならないので、 "checkout master; git reset remotes/trunk"はマスターをsvnトランクの状態にする必要があります。 –

答えて

1

githubをクラウドバックアップとして使用したいと思うようですね。

  • クリーンアップあなたは (私はのgit - svnのクローンについて--stdlayoutと仮定しています)を作っerrneous変更を取り除くために、あなたの地元のレポ。
  • Web UIを通じてgithub上に新しいリポジトリ(mybackupなど)を作成することをお勧めします。

コマンドは次のようになります

$ git reset --hard trunk (clean local tree) 
$ git remote add mybackup [email protected]:<username>/mybackup.git (add github remote) 
$ git push -u mybackup master (push to github) 

例:

私が現在持っていることのgit-svnの-managedリポジトリ(foo.git-SVN)に次のように試みました。

$ cd foo.git-svn 
$ git reset --hard trunk 
$ git svn rebase 
$ cd .. 
$ mkdir tmp.git && cd tmp.git && git init --bare 
$ cd ../foo.git-svn 
$ git remote add tmp ../tmp.git 
$ git push tmp master 

これは、私のgit-svnリポジトリのマスターブランチを新しい、純粋にgitリポジトリにプッシュしました。

+0

うん、それは私が必要なもののように見える...私は、既存のリポジトリでバックアップソリューションを使用することはできます(私は、リポジトリをリセットするといいでしょう、私はちょうど) –

+0

私はまずこれを新しい名前で試してみて、それがうまくいくかどうか確認します。存在する場合は、github上の既存のリポジトリを削除し、既存の名前で再作成します。 – idlethread

+0

重要なことは、あなたがgithubで素朴な裸のレポを持っていることを確認することです。さもなければあなたの 'git push'が問題を起こすでしょう。 – idlethread

3

あなたは「私はこれまでにSVNにコミットしたい」と言っています。だから私はあなたがGitHubのsvn-supportを見て、数ヶ月前にupdatedだったと思って、svnから直接プッシュをサポートするべきだと思う。

コード例GitHub;

$ echo '# Important change' >> branches/wip/README.md 
$ svn commit -m 'Made an important change' 
Sending  branches/wip/README.md 
Transmitting file data . 
Committed revision 27. 

...それは動作します;)これを使うと、gitを使う必要はありません。

+0

ええと、これはGitHubを私のプライマリリポジトリとして使う必要があることを意味しますが、今はやりたくないのです...? –

+0

申し訳ありませんが、私のせい(私はGitの世界に住んでいる)ので、私はsvnがGitのような複数のリモコンを扱うことができると思った。しかし、私はあなたがこのリンクを見てみるべきだと思うhttp://stackoverflow.com/questions/320759/synchronizing-code-with-two-subversion-repositories – Mattias

+0

それは別のオプションかもしれない...しかし、私は本当に本当に簡単な質問に答えがあります。私はちょうどGitのリポジトリの状態を捨てて、SVNから再び復元したいと思っています...それは私の 'git-svn'の基本機能のようですが、明らかに、それはそうではありません... –

関連する問題