3

小さなコード変更が必要な場合、サードパーティの Django アプリを Djano プロジェクトに取り込むにはどうすればよいですか? 次のことができる必要があります。

  1. アップストリームの変更をマージする
  2. 新機能/改造のプル リクエストを送信する
  3. 変更したアプリを複数のプロジェクトで使用する
  4. Django プロジェクトで変更したアプリをデプロイできる
  5. 物事を非公開にする(オプション)

既存のセミソリューション

このトピックには多くの混乱があるようです。私が提案していると思われる方法は次のとおりです。

方法 1 - pip/virtualenv - プロジェクトを別のリポジトリに保持し、それを Python パスに追加します。利点: コードを別々のプロジェクトにきれいに分割することで、おそらく全体的にわかりやすくなり、複雑さが軽減されます。 欠点: ローカルで開発する場合、依存関係を更新するために、より複雑な管理が必要になります。

2 - git submodule - サブモジュール モジュールを使用してコードを Django プロジェクト ディレクトリに取り込みます。長所: 実際には機能しているように見えますが、サブツリーはこの Django アプリのケースをうまく処理できません 短所: より複雑な展開

3 - git subtree - サブツリー モジュールを使用してコードを Django プロジェクト ディレクトリにプルします。私はこれをもっと自分で調べました。ここで見ることができますhttp://projects.madteckhead.com/django-superproject-3rd-party-git-repo-subdirectories-mapped-mapped-to-apps/ 利点:コードと履歴が保持されますDjango プロジェクト、簡単な展開、共同作業者の複雑さの軽減。短所:サブディレクトリまたはレポをプロジェクトのサブディレクトリに「マウント」できないようです。可能であれば...アップストリームの変更をマージする方法を理解できませんでした。

4 - 問題のサードパーティ アプリを django プロジェクトのアプリ ディレクトリにコピーします。長所: シンプル 短所: 簡単に変更をマージしたり、プル リクエストを送信したりできない

問題は、Python パッケージが実際にはリポジトリのサブディレクトリにアプリを持っていることです。例 thirdpartyapp/ thirdpartyapp/setup.py thirdpartyapp/thirdpartyapp/[対象のコードはすべてここにあります]

質問

複数のサードパーティのdjangoアプリをdjangoプロジェクトに最適に組み込み、それらに変更を加えたり、アップストリームの変更をマージしたりする方法を誰でも明らかにできますか。

私はクリーンなワークフローに本当に感謝しています.Djangoで使用するアプリに貢献することは、私にとって大きな障壁の1つでした.

どうもありがとう、

4

2 に答える 2

1

しばらくの間、方法 1 (pip/virtualenv) を使用していますが、サードパーティ アプリケーションのコードを管理または開発する方法が複雑だとは感じていません。

でサードパーティ アプリケーションの外部リポジトリへのフル パスを使用する方法でrequirements.txt、pip はこれらのアプリケーションをPROJECT_ROOT/env/src/application_dirディレクトリにインストールし、バージョン管理システムのすべての利点を備えています。そこでは、開発したり、独自のフォークに変更をプルしたり、通常の git サブモジュールのようにすべてを実行したりできます。

外部リポジトリに変更をプルせずに変更を加えたり、サードパーティのアプリケーションにいくつかのパッチを適用したりする必要があるが、本番環境で変更を取得できる場合は、fabriclassedパッケージをお勧めします。私はファブリックツールのシンプルなラッパーであり、デフォルト タスクがほとんどないクラスを使用してファブ ファイルを整理しておくのに役立ちます。たとえば、fabriclassed では、自動生成された *.diff ファイルをコマンドで使用して、virtualenv ディレクトリ内の任意の依存関係にパッチを適用できます。

# to dump all diffs of 3th party applications
$ fab diff_dump

# to patch all 3th party applications
$ fab patch
于 2012-02-24T12:27:04.007 に答える
0

git submodulesを使用します。メインリポジトリの一部ではなく、他の人によって大規模に開発されているアプリで他の人と共同作業する必要がある場合、それを行うことには大きな利点があります。技術的にはそれほど複雑ではありません。

于 2012-06-26T22:47:54.453 に答える