問題タブ [git-subtree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 大規模なリソースのGitサブツリーまたはGitサブモジュール?
問題は次のとおりです。ソフトウェア製品を忠実に再作成するためにバージョン管理する必要のあるGUIのアートワークを含め、多くのコードがあります。私はWindowsとMacの両方にも取り組んでいます。私が取り組んでいる実際のコードは毎日変更されますが、実際には非常に小さいものです。ただし、関連するすべてのリソースは、構築される前に合計で約数GBになります。
オンラインでの調査によると、gitリポジトリを高速に保つために使用する必要があるのはgit-subtreeまたはgit-submoduleのようです。
多くのGitユーザーが同様の問題に直面し、同じ決定に直面していると確信しています。
どのアプローチを使用し、どのような問題に直面しましたか?
git - サブディレクトリを別のメインリポジトリにgit pushする
サブツリーとしていくつかのディレクトリを持つ大きなメイン プロジェクトがあります。
特定のサブツリーの変更を、別のリポジトリである元の場所にプッシュしたいと考えています。
問題は、プッシュしたい現在のサブツリーが、プッシュしたいリポジトリからのものではないことです。グーグルで見つけたサブツリーガイドを介して、別のレポから来ました。とても似ているだけです。
ビッグプロジェクトのレイアウト、important_subtree
気になるところはどこ?
そして、important_subtree
そのレポに「強く関連している」:
現在は変更されており、重要なサブツリーをリポジトリにプッシュし~/devel/bigproject/important_subtree/efg.txt
たいと考えています。そのため、その後にも変更があります。~/devel/important
~/devel/important/efg.txt
私がなんとかできた唯一のことは、bigprojectのすべてを重要なものにプッシュすることです。これは明らかに私が望んでいることではありません。サブツリーの変更のみをプッシュする必要があります。
python - シンボリックリンクなしでgitとbuidoutを使用して共有サブアプリでPythonプロジェクトを構築する方法
子アプリを他のプロジェクトと共有する複数のプロジェクトがあります。プロジェクトディレクトリ内で作業しているときに、アプリに変更を加えて更新し、それらの更新を2番目のプロジェクトにプルできるようにしたいです。
要件:
- シンボリックリンクを使用しない(私のIDEのデバッガーはそれらでうまく機能しない)
- スクリプトをコンパイル/再実行する必要はありません。スクリプト/ビルドアウトを再実行せずにアプリに変更を加えたいのですが。
- アプリはプロジェクトフォルダー内にある必要があります。
構造は次のとおりです。
現在、私はこれにgit-submodulesを使用しています。欠点は、レポのサブフォルダーにリンクする方法がないことです。最近サブツリーについて読みましたが、これでうまくいくでしょうか?
理想的にはビルドアウトを使用したいのですが、シンボリックリンクを使用せずにこれを実現するための良い方法を見つけられませんでした。これを行う方法がある場合は、私に知らせてください。
任意の提案をいただければ幸いです。
git - git は、マージの競合を変更なしで報告し、行を空にします (git-subtree を使用)
git-subtreeを使用して、ライブラリ リポジトリをより大きなプロジェクトにマージする方法をテストしています。原則として素晴らしいようです。「git subtree pull」を実行すると、次のようなマージ競合が発生することがあります。
これは、ライブラリ リポジトリで行われた変更のためのもので、ローカルで変更されていないファイルにマージされます。または別の例として、ローカル プロジェクト リポジトリに行を追加しましたが、マージされるサブツリーの一部であるファイルに次の行を追加しました。
git がこれらをマージの競合として報告するのに、競合として報告された領域が空であるのはなぜですか? それを防ぐ方法はありますか?
これらは簡単に解決できますが、git-subtree ワークフローを台無しにします
git - gitリポジトリ内のフォルダを別々のブランチに分割する
私はついにCVSリポジトリをgitに移行しました。残念ながら、CVSではブランチを使用しませんでしたが、異なるバージョン/ブランチは異なるサブディレクトリに分けられました。
IEには、次のディレクトリ構造があります。
各バージョンのディレクトリを保持する代わりに、srcサブディレクトリ内の3つのバージョンを別々のブランチに分割する方法はありますか?
git-subtreeの使用が提案されているStackOverflowQuestion 4877053で同じ質問を見つけましたが、git-subtreeのマニュアルを読んだ後でも、問題を解決するためにそれを使用する方法がわかりませんでした。
誰かが私にもっと詳細な説明や別の解決策を教えてもらえますか?
私はgitにまったく慣れていないので、おそらくそれがサブツリーのマニュアルを理解していなかった理由です;-)
すべての回答に感謝します!
git - メイン プロジェクト リポジトリにユーティリティ リポジトリを含め、カスタマイズを許可する
一部のプロジェクトでソース コードの冗長性の改善に取り組んでいますが、問題に直面しています。
より多くのプロジェクトで使用するユーティリティがいくつかあるとしましょう。例: ビルド スクリプトとテスト スクリプトは、すべてのプロジェクトで使用できる汎用性を備えていますが、プロジェクトごとにカスタマイズできる構成ファイルもあります。
ビルド スクリプトのロジックを 1 か所で維持し (バグの修正と改善の追加)、それを使用するすべてのプロジェクトで簡単に変更できるようにしたいと考えていますが、構成ファイルを壊すこともありません。
構成ファイルをプロジェクト リポジトリではなくユーティリティ リポジトリにコミットする必要があるため、git サブモジュールではこれを実行できないことはわかっています。
私もgit-subtreeを見てきましたが、それが私が望むことをしているかどうかはわかりません。
誰かが前にこれに入ったのですか?
git - サブツリーを git リポジトリにプッシュする
私は Git にまったく慣れていません。私は SVN から来て、非常に強力な :external 機能を見つけました。ここGitでは、似たようなものは見つかりませんでした:
- サブモジュールは、必ずしも必要ではないプロジェクト モジュールを追加するのに最適です。それらはレポのクローン作成後に初期化する必要があり、元のプロジェクトのサブディレクトリのみを含めることはできません。
- サブツリーはライブラリを追加するのに非常に適しています (サブディレクトリを含めることもできます) が、それらをプッシュするのは本当に面倒です。
シナリオは次のとおりです。いくつかのライブラリを含めたいプロジェクトがあります。これらすべてのライブラリを変更し、それらを独自のリポジトリにプッシュする可能性が必要です。さらに、このライブラリの一部は、より大きなプロジェクトのサブディレクトリです (たとえば、プロジェクトにデモや readme ファイルも含まれている場合、それらのディレクトリはプロジェクトに含めません)。
どうやってやるの?
私はもう試した:
- http://progit.org/book/ch6-7.html + http://posterous.timocracy.com/git-sub-tree-merging-back-to-the-subtree-for (サブディレクトリのみをマージすることはできません。許可されていないか、見ることができません);
- http://www.tipstank.com/2011/02/21/git-subtree-notes-and-workflows/ (上記と同じ、サブディレクトリの包含を処理しない);
- http://psionides.eu/2010/02/04/sharing-code-between-projects-with-git-subtree/ (プッシュについては何も表示されません);
- http://h2ik.co/2011/03/having-fun-with-git-subtree/ (プッシュについては何も表示されません)
さて、あなたがこの時点に到達した場合、あなたの忍耐に感謝します.今、私の結論は「Gitではサブツリーのプッシュは許可されていない」ですので、別のことを試してみたいと思います ç_ç
django - Django アプリケーションをカスタマイズしてアップストリームに contrib/merge するためのワークフロー
小さなコード変更が必要な場合、サードパーティの Django アプリを Djano プロジェクトに取り込むにはどうすればよいですか? 次のことができる必要があります。
- アップストリームの変更をマージする
- 新機能/改造のプル リクエストを送信する
- 変更したアプリを複数のプロジェクトで使用する
- Django プロジェクトで変更したアプリをデプロイできる
- 物事を非公開にする(オプション)
既存のセミソリューション
このトピックには多くの混乱があるようです。私が提案していると思われる方法は次のとおりです。
方法 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つでした.
どうもありがとう、
git - ブランチでGitコミットを削除する
分岐しているコミットを削除するにはどうすればよいmaster
ですか?
非常に豊富なコミット履歴(および私のコードよりも前のもの)とともに、大きなライブラリをGitサブツリーを介してサブディレクトリに追加しました。その履歴全体をさかのぼってつぶしたいのですが、それでもライブラリへの新しいコミットにマージすることができます。
いろいろ組み合わせてみgit rebase
ましたが、期待通りの結果が得られませんでした[*]。
私のリポジトリは次のようになります。
そして私はそれが次のように見えることを望みます:
また:
[*]:
git rebase --onto C E master
git checkout F; git rebase --onto C E master
git - コミットが多いほど、Git サブツリーのプッシュに時間がかかるのはなぜですか?
私は git サブツリー拡張 ( https://github.com/apenwarr/git-subtree ) を使用しています。「--squash」を使用して、メイン プロジェクトのログをきれいにします。手順は次のとおりです。
ライブラリをメイン プロジェクトに追加する
git subtree add -P sub/libdir --squash lib_remote master
lib からアップデートを取得する
git subtree pull -P sub/libdir --squash lib_remote マスター
変更を lib_remote にプッシュする
git サブツリー プッシュ -P サブ/libdir --squash lib_remote マスター
それは私にとって非常にうまく機能します(メインプロジェクトとライブラリの両方で、歴史が理にかなっています)。問題は git subtree push の時間がどんどん長くなってしまうことです。
git-subtree を使用する私の目的は、git-subtree は履歴を保持していないため、サブツリーの変更をプッシュできないと尋ねた Screndib とほぼ同じ です。今後、これを修正/回避するにはどうすればよいですか?
--squash を使用する場合、 push を処理するたびに、git subtree は「サブツリーの追加」以降の履歴全体を検索する必要があると思います。
サブツリーのプッシュ時間を短縮するにはどうすればよいですか? または、履歴全体ではなく、最後のgitサブツリーのプッシュ(またはプル)以降の変更のみを処理して、より効果的に機能させますか?