12

サードパーティのコードをgitリポジトリにインポートする方法を検討しています。サードパーティのコードは、STが提供する「stm32f10x_stdperiph_lib」です。

libは、実際には、 STM32プロジェクトを実行するときにインクルードしてビルドするだけの通常のcファイル(およびヘッダーファイル)の集まりです。

問題は、zipファイルとしてのみ提供され、新しいバージョンがリリースされることです。そのため、さらに制御を追加したいと思います。

だから私の計画はこれを行う小さなスクリプトを書くことです:

  1. 解凍
  2. いくつかのファイルを取得します(zip内のすべてのファイルは必要ありません)
  3. 選択したファイルをgitリポジトリにインポートします

私の問題は最後のステップから始まります。古いファイルをインポートして新しいファイルで上書きする(そして含まれなくなったファイルを削除する)にはどうすればよいですか?

4

4 に答える 4

24

あなたが探しているのは「ベンダーブランチ」です。このコードで作業し、ベンダーの更新を独自のパッチとマージしたい場合は、次の方法で簡単に実行できます。

git checkout -b vendor    # create a vendor branch and check it out

それは一度限りのことです。ベンダーブランチとそのブランチには、サードパーティベンダーからの更新のみが含まれます。ベンダーブランチで作業することは決してありません。ベンダーのコードのクリーンな履歴が含まれています。「ベンダー」という名前には魔法はありません。私の用語はCVSから引き継がれています。

次に、ベンダーからの最新バージョンをそこに配置します。

find . -not -path *.git* -and -not -path . -delete  # delete everything but git files
dump the 3rd party code into the project directory  # I'll leave that to you
git add .                              # add all the files, changes and deletions
git commit -a -m 'Vendor update version X.YY'   # commit it
git tag 'Vendor X.YY'                  # optional, might come in handy later

ベンダーが削除したものをgitが確認できるように、最初にすべてを削除します。削除を確認し、移動されたファイルを推測するgitの機能により、この手順はSubversionよりもはるかに簡単になります。

ここで、開発に戻り(マスターを想定しています)、ベンダーの変更をマージします。

git checkout master
git merge vendor

通常どおり、競合に対処します。これで、パッチが適用されたバージョンがベンダーに更新されました。通常どおりマスターで作業します。

次回ベンダーから新しいバージョンがある場合は、手順を繰り返します。これは、gitの優れたマージを利用して、ベンダーの変更に合わせてパッチを最新の状態に保ちます。

于 2009-11-08T22:20:35.690 に答える
1

ここでは少し悪魔の擁護者ですが、本当にgitリポジトリとして必要ですか?

おそらく、代わりにプロジェクト内のすべてのサードパーティコードをダウンロードして更新するスクリプトを設定しますか?私の考えでは、最終的にはインポートが難しいサードパーティの依存関係に遭遇するでしょう。たとえば、Pythonでは、buildoutを使用してすべての依存関係をインストールします。そうすれば、git、mercurial、subversion、zipファイル、パッケージなどを簡単に組み合わせることができます。

ただし、次のようなものが機能するはずです。

$ cd repo
$ find . -not -path *.git* -and -not -path . -delete
$ unzip /tmp/thirdparty.zip
$ git add .
$ git commit -a 'Updated version'

つまり、ディレクトリなどを除くすべてのファイルを削除します。これは、サードパーティプロジェクトで削除されたファイルの場合を処理するためです。次に、更新されたzipファイルをディレクトリに解凍します。新しいファイルをリポジトリに追加します。専念。.git.gitignore

お役に立てば幸いです。:)

于 2009-11-08T10:46:21.050 に答える
0

私の好みは、gitリポジトリを作成し、定期的に更新し(git commit -a -m'Update')、プロジェクトにリンクする(ディレクトリ(ln -s、junctionなど)または共有ライブラリとして)ことです。不要なファイルについては、.gitignoreを使用してください。

于 2009-11-08T10:51:25.540 に答える
-1

私はGitを初めて使用しますが、Pistonのようなものがより良い解決策ではないでしょうか?http://piston.rubyforge.org/

于 2010-12-10T18:36:38.037 に答える