問題タブ [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-subtreeプルの合併症
私たちはgit-subtreeをプロジェクト(gitバージョン1.7.9.4)で動作させようとしていて、少し複雑になっています。他の誰かが数ヶ月前にこのコマンドでサブツリーを追加しました:
現在、に実質的な変更が加えられておりfoo
、それらの変更をマージして、理想的にはそれらを押しつぶしたいと考えています。インポートされてから、ファイルは変更されていません。
私は変更をマージするために3つのことを試みました。
初め:
これは例外をスローします:Can't squash-merge: 'foo' was never added.
2番:
これは(一種の)機能しますが、すべてのコミットをプルするという問題があり、変更されたファイルと競合します。
最後に、私はこれを試しました:
これにより、出力Automatic merge went well; stopped before committing as requested
とすべてのファイルが変更されたものとして(正しい内容で)表示され、望ましい結果が得られます。
git-subtree
理想的には、最初のバージョンを引き続き使用して、最後のバージョンに近い出力を取得したいと思います。今後も一貫して最後のバージョンを使用する必要がある場合は使用しますが、最後のバージョンがマージの競合を生成しないのに、真ん中のバージョンが生成する理由については少し混乱しています。
どんな助けでも大歓迎です。
git - 無関係なリポジトリから同じプレフィックスに git-subtree を複数回追加しましたが、サブツリーをプッシュできません
プロジェクトでベンダー リポジトリを管理するために git-subtree (https://github.com/apenwarr/git-subtree) を使用しています。
しばらく前に、プロジェクトのレイアウトを作り直しました。その一部には、一部のベンダー コードを削除し、ベンダー リポジトリの新しいコピーから git-subtree を使用して再読み込みする作業が含まれていました。ベンダー リポジトリの新しいコピーは同じコードでしたが、ゼロから再作成したため、共通のコミットはありませんでした。
関連するコミットは次のとおりです(下から上に読んでください):
ここで、ベンダー リポジトリ (03149e3a4c3289b5a88fc3f7ae17fb11c44c4d68 を含む「新しい」リポジトリ) に 'git サブツリー プッシュ' しようとすると、次のエラーが発生します。
git-subtree-dir は指定されたプレフィックスと一致しますが、コミット 6324cb1724fcdf87294b2e4f438dedf5920a3156 がなくなり、そのレポが存在しないためフェッチできません。
これを修正する方法に関する推奨事項はありますか? 現在、2 つのオプションを確認できます。 1. 新しいディレクトリの下に再度追加します (原則として、これを行いたくありません)。2.破損の原因となっている以前のコミットのサブツリー データを手動で消去します (一般的にこれを行うことはお勧めしませんが、このレポの他のコピーがあまりないため、この場合は回避できると思います)。 .
git - gitsubtreepushが変更をサブツリープロジェクトにプッシュバック
以下の簡単な説明:コミットメッセージをサブツリーにプッシュしたいのですが、そのツリーに適用されるメッセージのみです。どうすればよいですか?
私には2つのプロジェクトがMaster
ありSlave
ます。 Slave
チェックアウトされたのサブツリーとしてMaster
チェックアウトされますlib/slave
。git subtree merge --prefix=lib/slave --squash projects/slave
ここで、チェックアウトされprojects/slave
たブランチは次の場所にSlave
あります。
ブランチ:
マスタープロジェクト/スレーブ→スレーブ
現在、私は自分のmaster
ブランチに取り組んでおり、両方のプロジェクトの一部であるファイルにコミットし、すべてが順調に進んでいます。今、私は変更をプッシュバックしたいと思いますSlave
:
- gitチェックアウトスレーブ
- gitマージ??? 主人
lib/slave
通常のマージを行うと、のファイルが変更されたかどうかに関係なく、マスターへのコミットごとにコミットが取得されます。または、を実行して--squash
1つのコミットしか取得できませんが、ログメッセージが失われます。
では、適切なログメッセージを取得するにはどうすればよいですか?たとえば、master
ログ履歴が次の場合:
- マスターに画像を追加
- スレーブのみで変更されたファイル
- マスターのみへのその他の変更
- マスターとスレーブの変更されたファイル
これを追加したいSlave
:
- スレーブのみで変更されたファイル
- マスターとスレーブの変更されたファイル
git - Git サブツリー エラー
Macにgit-subtreeをインストールしようとしましたが、最初のステップの後:
git-subtree を使用しようとすると、常にエラーが発生します。
私のgitバージョンは1.7.7.4です。
git - スカッシュなしのgit-subtree:ログを表示
スカッシュオプションなしでgitsubtreeaddを使用して、ツリーをリポジトリにマージしました。gitログは、コミットがリポジトリに正常に追加されたことを示しています。ただし、を実行するgit log --follow filename
と、履歴はマージで停止し、以前のコミットは表示されません。-M
代わりに使用してみましたが--follow
、それも機能しません。マージ前の特定のファイルのコミットのログを取得するにはどうすればよいですか?
git - 並列再帰 Git サブモジュール
当社では、いくつかのフレームワーク/ライブラリを重ねてプロジェクトを作成しています。
これまでのところ、すべてのプロジェクトとフレームワークを含む大きな git リポジトリを使用しており、git サブツリーを使用してフレームワークのみを分割して公開しています (オープン ソースです)。
この大きなリポジトリを異なるプロジェクトに分割できるようにしたいのですが、再帰的な依存関係が非常に多いという事実が心配です:
私の知る限り、両方の git サブモジュール/git サブツリーでは、すべてのライブラリ コードがメイン リポジトリ内にある必要があるため、次のようなプロジェクト構造になります。
フレームワークのコピーがどこにでもたくさんあるのは好きではありません。また、フレームワーク フォルダーが階層内で非常に深くなるという事実も好きではありません。
私たちが望むのは、プロジェクト A リポジトリがプル時に、現在のリポジトリと並んでいくつかの SHA を含むリポジトリがあることをアサートし、この SHA をチェックすることです。
git サブモジュール/サブツリーを並べて作成する方法はありますか?
git - ソース管理下のコードで使用されるサードパーティのソースとバイナリの管理
私はソース管理下にある大きなコードベースを持っています(以前はSubversionでしたが、現在はgitです)。コードをコンパイルしてテストを実行するために、サードパーティのライブラリのセットを使用します。これらのライブラリはいくつかのカテゴリに分類できますL
- バイナリのみ
- サードパーティのソース
- サードパーティのソース+ローカルの変更
各ライブラリには、{Windows、Linux} X {デバッグ、リリース} X {32ビット、64ビット}構成があります。さらに、これらのライブラリは時間とともに進化し、プロジェクトのさまざまなバージョンがこれらのライブラリのさまざまなバージョン/ビルドを使用します。
私の質問は、これらのサードパーティを保存するための最良の方法は何ですか?
これが私の好みのセットです:
- プロジェクトソースリポジトリのサイズを小さく保つ
- プロジェクトソースをサードパーティと同期させて、いつでも古いバージョンをコンパイルして実行できるようにします
- 管理が簡単
- クロスプラットフォーム
私はいくつかの解決策を試し、考えましたが、どちらも満足のいくものではありませんでした。
- バージョン管理されたスクリプトを使用して、ライブラリのすべてのバージョンを保持する手動で管理されたftpサーバーからバイナリをフェッチします。これは機能しますが、サーバー上のディレクトリ構造を注意深く管理する必要があります。誰かがバイナリの1つを新しいビルドで上書きする可能性があるため、エラーが発生しやすくなります。
- SVN外部-当時、SVN外部は特定のタグを参照できませんでした。今日はgitを使っています。
- Gitサブモジュール-巨大になる可能性のある外部リポジトリ全体をプルします。または、ライブラリごとに個別のリポジトリを管理する必要があります。サブモジュールは特定のタグを指します。これは、一部だけが必要なときにすべての外部を取得するか、gitツリーで奇妙なファイルシステムを模倣することを意味します。
サードパーティのソースをベンダーブランチのgitに保存する必要があることは明らかですが、バイナリとヘッダーは別の話です。
git - gitsubtreemergeとgit-subtreeの違いは何ですか
しばらく前にメインのgitリポジトリの一部になったgit-subtreeツールを見つけました https://github.com/apenwarr/git-subtree/
ただし、このツールが既存の「gitread-tree」+「gitmerge-ssubtree」に対してどのような機能を提供するのか完全には理解していません。git-subtreeの唯一の目的は、結果のコミット履歴の見栄えを良くすることですか、それとも私が見落としていたより多くの機能を備えていることですか?
git - サブツリーのマージ中に特定のフォルダーとファイルを無視するように git に指示する方法は?
次のディレクトリ構造を持つマスターブランチがあります
また、次のファイルを含む templates_master ブランチもあります (ルートの右側)。
次に、マスターに移動し、テンプレートをマスター テンプレート フォルダーにロードします。
これが現在このマスター構造になっています
次に、マスターにとどまり、templates/a.html にいくつかの変更を加えて、いくつかのコミットを行います。ここで、この変更された templates/a.html を元のブランチに戻したいと思います。templates_master ブランチに切り替えて、このコマンドを実行します
ただし、このコマンドはmaster:templates/a.htmlをtemplates_master:a.htmlにコピーするだけでなく、これらのlibsファイルもコピーするため、基本的に私のtemplates_masterブランチには元のマスターtemplates/が持っていたすべてのものがあります。特定のファイルとフォルダーを master ブランチのみに保持するように git に指示することは可能ですか、またはこのロジックは git レベルでハードコードされていますか。つまり、サブディレクトリのマージ中に、templates/ を指すツリーのようなものを使用し、templates/ 内のすべてが子になることができます。テンプレートの/ ?