2

コンテキスト: 開発中のアプリケーションに Git を使用しています。私のアプリケーションは、自分のニーズに合わせてパッチを適用するオープン ソース ライブラリを使用しています。このオープン ソース ライブラリは SVN にあります。

問題: このサードパーティ コンポーネントを Git リポジトリにインポートして維持する方法を探しています。パッチをアップストリームにプッシュする必要はありません。

オープン ソース ライブラリの SVN リポジトリは非常に標準的です。

trunk/
tags/
 - v1/
 - v2/
branches/

私の Git 作業コピーのディレクトリ構造は非常に単純です。

my_app/
lib/

のタグ v1 から lib のソース コードをインポートするにはどうすればよいlib/ですか?

また、開発チームが SVN リポジトリにタグ v2 を作成したときに、ライブラリの新しいバージョンをマージまたはリベースするにはどうすればよいですか?

状況の具体例を示すために、bash スクリプトを作成しました。

# Create the open source library's SVN repo and its first tag.
svnadmin create lib_svn_repo/
svn checkout "file:///${PWD}/lib_svn_repo/" lib_working_copy
( cd lib_working_copy ; mkdir -p trunk tags branches ; svn add * ; svn commit -m 'Initialize SVN repo' ; cd trunk ; echo "print 'Hello v1'" >source.py ; svn add * ; svn commit -m 'Development for v1' ; cd .. ; svn up ; svn cp trunk/ tags/v1 ; svn commit -m 'Tag v1' ; sed --in-place 's/v1/v2/' trunk/* ; svn commit -m 'Development for v2' )

# Initialize my own project's git repository.
mkdir my_app
( cd $_ ; git init ; mkdir -p src lib ; touch src/.gitignore ; git add * ; git commit -m 'Initialize my app' )

# How to import the lib source code from tag v1 in the lib subdirectory???
# Expected: lib/ contains a source.py that displays "Hello v1".

# Commit local changes in my git repo.
( cd my_app/ ; echo "print 'My local modification'" >>lib/source.py ; git add * ; git commit -m 'Added local modification to the library' )

# Library dev team creates a tag v2.
( cd lib_working_copy ; svn up ; svn cp trunk/ tags/v2 ; svn commit -m 'Tag v2' )

# How to merge or rebase lib/ on tag v2???
# Expected: lib/ contains a source.py file that displays both "Hello v2" and "My local modification".
4

1 に答える 1

1

次に (履歴は必要ないため) svn リポジトリをエクスポートし、ファイルとして git リポジトリにインポートすることをお勧めします。これが最も簡単です。

次に、気になる外部 svn リポジトリのタグの変更を監視し、外部 svn リポジトリに基づく差分をパッチとして git リポジトリに適用します。

于 2013-07-27T18:59:49.933 に答える