5

私はチームでプロジェクトに取り組んでいます。彼らは SVN を使用していますが、私は git を好みます。単純に SVN を上手に使えばもっと簡単にこれを行うことができますが、生活を複雑にして Git を使用したいと考えています。

これが彼らのセットアップです:

  ~/www(svn)
   |       \
trunk(svn)  mybranch(svn)

私はを頂きたい

/srv/git/www 

ブランチのトランクと mybranch を使用

トランク ブランチの while 内で git pull を実行するとき/srv/git/www、スクリプトが svn update on~/www/trunkを実行し、任意の svn コミットで git ブランチを更新するのが好きです (git 履歴とコミット メッセージが svn とコミット メッセージと一致するように)

git pullgit mybranch ブランチでも同じ動作をします

私のワークフローは次のようになります

git checkout trunk
git pull
git checkout mybranch
git rebase trunk

いくつかの作業を行います

(トランクを引っ張ってから更新されていない場合):

git commit 
git push
git checkout trunk
git merge mybranch
git push

コードがこれらのブランチのいずれかにプッシュされるたびに、git フックが svn commit をトリガーするようになれば幸いです。

アドバイスをお願いします。最初は SVN だけを使ってみましたが、ロックがかかってしまい、マージが悪くなるたびに再チェックアウトする必要があり、SVN に非常に悩まされていました。

これを行うためのより良いモデルがある場合は、教えてください。それ以外の場合は、git を使用してそれを行う方法を教えていただければ幸いです。私は git svn コマンドがあることを知っていますが、私はそれを信頼していません - 私は上記がより安全であることを望んでいました (私には少し狂っているように見えますが.)

ありがとうございました!

4

2 に答える 2

4

SubGitがどのように機能するかを説明しました。2.0以降では、事前受信Gitフック(「gitpush」で実行される)を使用して、GitとSVN間の双方向変換が可能になります。それをあなたのマシンで実行するには

$ subgit configure --svn-url <URL_of_repository_root> repo.git
$ #adjust repo.git/subgit/{config,passwd,authors.txt} to set auth options, branches to translate and SVN<->Git authors mapping
$ subgit install repo.git

次に、repo.gitのクローンを作成します(「pre-receive」フックを機能させるためだけに同じマシン上にある場合でも)

$ git clone repo.git myproject
$ cd myproject
$ #do something with master
$ git push origin master

'master'から到達可能なすべての新しいコミットは、SVNのコミットに変換されます。デフォルトでは、同じことが他のブランチにも当てはまります。

于 2013-01-04T20:47:31.803 に答える
3

最初は SVN だけを使ってみましたが、ロックがかかってしまい、マージが悪くなるたびに再チェックアウトする必要があり、SVN に非常に悩まされていました。

あなたが抱えているように見える問題がSubversionにあることに本当に気づいていません。私はそれがロックすることを経験しておらず、Subversion とのマージはかなりうまく機能します。実際、Git マージよりも Subversion マージの方が問題は少ないです。あなたのフラストレーションの多くは、Subversion 自体の問題ではなく、なじみのないソフトウェアでの作業にあるのではないかと思います。私も、慣れ親しんだ方法で動作しないソフトウェアに不満を感じます。

ただし、問題を回避するのではなく、Subversion に慣れたほうがよいでしょう。Subversion はソフトウェアの世界で人気があるため、Subversion に何度も出くわすことになります。使い方は簡単で、かなり良い仕事をします。この世界では、Windows よりも OS X と Linux を好むかもしれませんが、それでも Windows の知識は必要です。なじみのないソフトウェアにもイライラすることはわかっています。ただし、Windows とは異なり、Subversion は悪ではありません。その上、それはかなりうまく機能します。

私が Git で気に入っている点の 1 つは、Subversion に欠けていることですが、マスター リポジトリに影響を与えることなく自分の作業をコミットできることです。Git での私のワークフローは次のようになります。

git checkout
git pull
git add
git commit
git add
git commit
git add
git commit
git add
git commit
git add
git commit
git add
git commit
git push

あなたが私のようなシリアル コミッターなら、Git-SVNを試してみてください。これにより、Git をローカルで操作してシリアル コミットを行うことができますが、プッシュとプルを行うときは、実際には Subversion リポジトリと対話しています。ただし、これは単に Git だけで作業しているふりをしてよいという意味ではありません。ブランチとマージを行うときも、Subversion と直接やり取りする必要があります。

シリアル コミッターでない場合、Git-SVN はおそらくあまり役​​に立たないでしょう。あなたがすることは、複雑さとフラストレーションを追加することだけです。

Subversion は、継続的インテグレーション環境で使用される不安定なトランクモデルで動作するように設計されています。つまり、通常は全員が同じブランチを共有します。他の人と仲良く遊んだり、少しずつ変化を加えたりする必要があります。ただし、Subversion で独自のプライベート ブランチを作成してそこで作業できない理由はありません。

私は多くのコードの再構築を行っています。つまり、ファイルを移動したり、1 日では完了できない多くの作業を行ったりしています。他のすべての開発者が使用しているブランチで作業することはできないため、独自のプライベート ブランチを作成します。誰かがマージの問題を抱えているとしたら、それは私でしょう。ファイルをあちこちで変更するだけでなく、コードのレイアウト全体を変更しているからです。それでも、Subversion はほとんどの場合、マージを慎重に処理します。定期的にリベースしています。仕事が終われば問題なく大量配信します。次に、ブランチを削除します。

于 2013-01-04T16:50:28.870 に答える