10

大量のファイルを含むサイトを 2 つのチーム間でマージするという困難な作業があります。1 つのチームが に取り組んでおり、もう 1 つのチームがgitを使用していsvnます。これについて最善の方法を教えてください。私が考えているのは、新しいベアレポを作成することです

git clone --bare ~/dir gitversion.git

次に、そこからブランチを作成します

git checkout -b import-svn

次に、そのブランチでsvnからプルします

svn checkout svn://svnversion/trunk

今、このブランチでリベースしますか?

git rebase origin/master

次に、マスター ブランチに戻ります

git merge import-svn

私はこのようなことを試みましたが、どこにも行かないようでした。マージの競合や意味をなさないものはありません。誰かがこれを達成するためのまともなワークフローを教えてもらえますか?

4

3 に答える 3

9

私は、SVN ベースの開発からの複数のリリースに対処するために、似たようなことに直面しました。これが私がそれをどのように処理するかのスケッチです:

# checkout the SVN source
$ svn checkout svn://svnversion/trunk
$ cd /into/svn/checkout

$ git init
$ echo ".svn/" > .gitignore
$ git add .gitignore; git commit -m 'Initial .gitignore'

# Now you have a master branch; create your import-svn branch
$ git checkout -b import-svn

# Add *everything* from the SVN checkout
$ git add -A
$ git commit -m 'Initial SVN'

# Now get the GIT developed stuff
$ git checkout -b import-git master
$ git remote add original-git /path/to/git-developed-repository
$ git pull original-git master         # or whatever branch your git developers used.

# Now you've got two branches 'import-svn' and 'import-git'; DIFF and MERGE as you please

# You don't need the remote anymore.
$ git remote rm original-git

おおむね正しいと思います。

これで、マージについて考えることができます。「import-git」を優先ベースラインと見なした場合、次のようなものが機能します。

$ git checkout -b git-merge-svn import-git
$ git diff --name-status import-svn
$ git merge import-svn

次のようなリベースを試して、どちらを好むかを決めることもできます。

$ git checkout -b git-rebase-svn import-git
$ git rebase import-svn

そして、マージとリベースを比較します(同じはずですが、わかりません..)

$ git diff git-rebase-svn..git-merge-svn
于 2012-04-24T23:24:58.627 に答える
1

最終レポは Git であると仮定します。このソリューションは、両方の履歴を保持します

最初に裸でないリポジトリで作業します。やりたいことは簡単です。git リポジトリのクローンを作成し、SVN リポジトリから別の git リポジトリを作成しsvn2gitます。

したがって、2 つのリポジトリがあります。1 つのリポジトリを別のリポジトリにリモートとして追加し、履歴を別のブランチにインポートします。

git remote add ../other-repo
git fetch other-repo
git branch other-repo other-repo/master

ベース コミットがないという警告が表示されるため、2 つの孤立したブランチが作成されます。

これで、ブランチをマージできます。これらは関連しているが完全に異なる歴史であるため、これはひどい、ひどいはずですが、他に選択肢はありません. コミットは無関係であるため、ここではリベースはナンセンスです。

于 2012-04-24T23:31:49.427 に答える