問題タブ [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のサブツリーコマンドを使用して、いくつかのライブラリをプロジェクトにプルしています。
その後、通常の方法でプロジェクトのクローンを作成すると、必要なすべてのコードが作成されますが、サブツリーの関係が失われます。クローンには、各ライブラリのリモートがなく、の-pushブランチもありません。それらのいずれか。
この接続を再確立するための最良の方法は何ですか?
するだけで十分ですか
ライブラリを初めて追加する場合は、次のようにします。
ただし、ローカルディレクトリがすでに存在する場合は機能しません。もちろん、ライブラリがすでに追加されているプロジェクトのクローンを作成した場合は機能します。
この状況で、後続のgitsubtreemergeおよびgitsubtreesplitコマンドを期待どおりに確実に実行するために他にすべきことはありますか?
git - Git サブツリー マージのソースを変更する方法
Git サブツリーを使用してライブラリにマージしたプロジェクトがあります。ライブラリとプロジェクトの間でいくつかのマイナーな変更をプッシュおよびプルしました。
その後、ライブラリの最終的なホームとなる新しいリポジトリが作成されました。これには、私のプロジェクトと基本的に同じバージョンのライブラリ コードが含まれていますが、おそらく 1 つまたは 2 つのマイナーな変更が加えられています。さまざまな理由から、以前のライブラリのホームと直接の Git 履歴を共有していません (以前のライブラリのクローンではありません)。
私が今やりたいことは、新しい場所からライブラリをプル/プッシュするようにプロジェクトを変更することです。これが初めて発生した場合は、マージの競合も解決する必要がありますが、この場合、変更は些細なものであり、後でやり直すことができます。
これを行う最善の方法は何ですか?
プロジェクトのライブラリのコピーを削除してから、古いリモートとブランチと一緒に削除しようとしました。次に、新しい場所からサブツリーの追加などを試みました。これは機能しているように見えましたが、プロジェクトからライブラリにプッシュバックしようとすると、致命的な不良オブジェクト エラーが発生します。
私が試したアプローチには欠陥があると思います-おそらく共有された歴史の欠如に関係しています-しかし、それを修正する方法や何を知るために何が起こっているのかを十分に理解していません.この問題に対する「適切な」アプローチはあるべきです。
[更新: 質問を編集して少しわかりやすくしました - 少しあいまいでした]
python - 標準の「再帰的」よりもPythonのツリーのような構造からサブツリーを取得するより速い方法はありますか?
3 つの numpy 配列 (id、parent_id) (ルート要素のparent_id は -1) を持つ次のデータ構造体を想定します。
これは、多くのID (>1000)で非常に遅くなります。それを実装するより速い方法はありますか?
git - git subtree pull は、作業ツリーに変更があることを示していますが、git status は変更していないことを示しています。何を与える?
リポジトリの 1 つでこれを行うと、次のようになります。
私はこれを得る:
これを行うと(もちろん同じ場所で):
私はこれを得る:
ここで何が起こっているのかよくわかりません。git status コマンドは、変更がないことを意味するため、git subtree pull は、サブツリーに関連する別のブランチでの変更を参照していると想定していますが、完全には明確ではありません。
誰でも啓発を提供できますか?
git - git merge: サブディレクトリにリモート リポジトリが存在する
ベンダー ブランチを追跡する古い CVS リポジトリを git に変換しようとしていますが、マージの問題が発生しています。
リポジトリは次のように構成されています。
dir2 は上流のブランチから取得されます。アップストリームは既に git に変換されており、リポジトリの dir2 は彼らの git リポジトリのルートです。それらをリモートとして追加し、ルートをサブディレクトリ dir2 にマージしたいと考えています。
単純なマージは機能しません。git はそれらのルートをルートとして扱い、共通のファイルを見つけません。
サブツリーのマージは機能しません。既存のディレクトリにサブツリーをマージすることはできません。サブツリー マージ戦略ガイドの使用方法に従いましたが、このコマンドは失敗します。
問題は、dir2 に既に存在する「競合する」ファイルを検出することです。ファイルが存在することはわかっています。それらのファイルをマージしたいのです。
アドバイスをいただければ幸いです。
git - 履歴をマージせずに可能なGitサブツリーマージ戦略?
自己完結型のリポジトリを取得するためにサブモジュールから離れようとしていますが、サブツリーのマージ戦略はこのユースケースに一致しているようです。
ただし、マージされたリポジトリの履歴は、私自身のプロジェクトの履歴に表示されます。これは、かなり面倒です。
すべてのサブツリーのファイルをプロジェクトのルートに書き換えるgit filter-branch --subdirectory-filter path/to/subtree/ HEAD
サブツリーを更新しようとするまで、どちらが機能するか試してみました。git pull -s subtree my-subtree master
これをgitでネイティブに実現する方法はありますか?
git - gitの「サブモジュール」:ブレードまたはサブツリーまたはその他
「メイン」リポジトリにいくつかの外部gitリポジトリを含めるには、いくつかのオプションがあります。
- サブモジュール
- ブレード
- サブツリー
最初のものは基本的に誰もが反対するようにアドバイスされているようです。2番目と3番目は、サブツリーパターンの実装だと思います。
1つは良いですか?どちらを使うべきですか?なんで?どうすればそれらから選択できますか?
c++ - 真に汎用的なディスク焼き込み B+Tree 実装を作成することは可能ですか?
私は数回前に C++ で一般的なメモリ内 B+Tree の実装を書きましたが、それをディスク上で永続化することを考えています (これが、最初に B+Tree が設計された理由です)。私の最初の考えは、mmap(私はLinuxを使用しています)を使用して、ファイルを通常のメモリとして操作し、新しいものを書き換えることでしたこれにより、マップされた部分にポインターが返され、RAMアドレスをファイルオフセットに変換してノードを他のノードにリンクできるスマートポインターが作成されます。しかし、ユーザーが int、std::string、または任意のカスタム クラスを B+tree に格納できるように、実装を汎用にしたいと考えています。ここで問題が発生します。プリミティブ型またはポインターを含まない集約型の場合はすべて問題ありませんが、オブジェクトにヒープ割り当てオブジェクトへのポインター/参照が含まれるとすぐに、このアプローチは機能しなくなります。
だから私の質問は: この困難を克服するための既知の方法はありますか? トピックに関する個人的な検索は失敗に終わりますが、何かを見逃している可能性があります。
git - プラグイン開発に git を使用する
これと同様の質問がすでに行われていますが、私がやろうとしていることとは正確には異なります.
最初は git サブモジュールが必要だと思っていました。次にスーパープロジェクトをセットアップし、次にサブツリーをマージしましたが、これらのいずれかが実際に適合するかどうかはわかりません。
プロジェクト(Eva)があり、オプションの拡張機能をいくつか書いています。したがって、Eva のコピーを Github から取得した場合、オプションのプラグインは含まれていませんが、個別に取得して使用することができます。
オプションの拡張子は、Eva と同じディレクトリ構造にあります。ここまでシンプル...
今夜、これらの拡張機能にテストを追加したいと思いました。現在、ローカルの Eva git リポジトリの外にある別のディレクトリにテストを置いています。これらのテストを実行するには、これらの拡張機能を Eva と同じディレクトリに配置する必要があります。イベントの実行はコア システムに依存しています。
Eva プロジェクト ファイルを拡張リポジトリ ディレクトリにコピーすることはできますが、Eva のソースを変更する場合は、それらの変更をコピーし続ける必要があります。
この不器用なセットアップを続行する必要がありますか、それとも git がこれに対応できるより適切な方法はありますか?
たぶん、私の要件は他の質問の逆です。私の拡張機能は Eva のサブ プロジェクトであり、時々 Eva リポジトリから更新を取り込む必要があります。
誰かが Eva のクローンを作成するときに拡張リポジトリをサブモジュールとして追加すると、オプションのプラグインもすべて取得されますか? 私はそれをしたくありません。
サブツリーのマージがどちらにも適合するかどうかはわかりませんが、拡張プロジェクトをコア Eva プロジェクトにプルする必要はありません。
git - リモートリポジトリからマージ/プルする方法
リモート git リポジトリから自分のリポジトリにいくつかのサブディレクトリをマージしようとしています。リモート リポジトリとローカル リポジトリの両方にカーネル リポジトリ全体が含まれており、ワイヤレス関連のファイルのみに関心があります。「サブツリー マージ戦略の使用方法」の指示に従おうとしましたが、ほとんどのファイルがローカル リポジトリとリモート リポジトリの両方に存在するため、
git read-tree --prefix=dir-B/ -u Bproject/master
コマンドは失敗します。-m
オプションと--prefix
同じコマンド ラインで使用できませんでした。
このマージは、リモート ファイルを優先して競合を解決する必要があるリモート リポジトリ内のファイルに従って、関連するすべてのワイヤレス ディレクトリ/ファイルを実際に更新 (マージ/プル) する必要があります。
私の質問を一般的にするために、リポジトリ A と B があるとします。両方とも、フォルダ wireless_dir: A/wireless_dir、B/wireless_dir を持っているとします。私はリポジトリ B に取り組んでおり、マージの競合が発生したときに A/wireless_dir の変更が優先される A/wireless_dir から B/wireless_dir のすべてのファイルを更新したいと考えています。