問題タブ [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.

0 投票する
4 に答える
17052 参照

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理想的には、最初のバージョンを引き続き使用して、最後のバージョンに近い出力を取得したいと思います。今後も一貫して最後のバージョンを使用する必要がある場合は使用しますが、最後のバージョンがマージの競合を生成しないのに、真ん中のバージョンが生成する理由については少し混乱しています。

どんな助けでも大歓迎です。

0 投票する
0 に答える
357 参照

git - 無関係なリポジトリから同じプレフィックスに git-subtree を複数回追加しましたが、サブツリーをプッシュできません

プロジェクトでベンダー リポジトリを管理するために git-subtree (https://github.com/apenwarr/git-subtree) を使用しています。

しばらく前に、プロジェクトのレイアウトを作り直しました。その一部には、一部のベンダー コードを削除し、ベンダー リポジトリの新しいコピーから git-subtree を使用して再読み込みする作業が含まれていました。ベンダー リポジトリの新しいコピーは同じコードでしたが、ゼロから再作成したため、共通のコミットはありませんでした。

関連するコミットは次のとおりです(下から上に読んでください):

ここで、ベンダー リポジトリ (03149e3a4c3289b5a88fc3f7ae17fb11c44c4d68 を含む「新しい」リポジトリ) に 'git サブツリー プッシュ' しようとすると、次のエラーが発生します。

git-subtree-dir は指定されたプレフィックスと一致しますが、コミット 6324cb1724fcdf87294b2e4f438dedf5920a3156 がなくなり、そのレポが存在しないためフェッチできません。

これを修正する方法に関する推奨事項はありますか? 現在、2 つのオプションを確認できます。 1. 新しいディレクトリの下に再度追加します (原則として、これを行いたくありません)。2.破損の原因となっている以前のコミットのサブツリー データを手動で消去します (一般的にこれを行うことはお勧めしませんが、このレポの他のコピーがあまりないため、この場合は回避できると思います)。 .

0 投票する
1 に答える
4164 参照

git - gitsubtreepushが変更をサブツリープロジェクトにプッシュバック

以下の簡単な説明:コミットメッセージをサブツリーにプッシュしたいのですが、そのツリーに適用されるメッセージのみです。どうすればよいですか?


私には2つのプロジェクトがMasterありSlaveます。 SlaveチェックアウトされたのサブツリーとしてMasterチェックアウトされますlib/slavegit subtree merge --prefix=lib/slave --squash projects/slaveここで、チェックアウトされprojects/slaveたブランチは次の場所にSlaveあります。

ブランチ:

マスタープロジェクト/スレーブ→スレーブ

現在、私は自分のmasterブランチに取り組んでおり、両方のプロジェクトの一部であるファイルにコミットし、すべてが順調に進んでいます。今、私は変更をプッシュバックしたいと思いますSlave

  • gitチェックアウトスレーブ
  • gitマージ??? 主人

lib/slave通常のマージを行うと、のファイルが変更されたかどうかに関係なく、マスターへのコミットごとにコミットが取得されます。または、を実行して--squash1つのコミットしか取得できませんが、ログメッセージが失われます。

では、適切なログメッセージを取得するにはどうすればよいですか?たとえば、masterログ履歴が次の場合:

  • マスターに画像を追加
  • スレーブのみで変更されたファイル
  • マスターのみへのその他の変更
  • マスターとスレーブの変更されたファイル

これを追加したいSlave

  • スレーブのみで変更されたファイル
  • マスターとスレーブの変更されたファイル
0 投票する
1 に答える
590 参照

git - Git サブツリー エラー

Macにgit-subtreeをインストールしようとしましたが、最初のステップの後:

git-subtree を使用しようとすると、常にエラーが発生します。

私のgitバージョンは1.7.7.4です。

0 投票する
2 に答える
5623 参照

git - スカッシュなしのgit-subtree:ログを表示

スカッシュオプションなしでgitsubtreeaddを使用して、ツリーをリポジトリにマージしました。gitログは、コミットがリポジトリに正常に追加されたことを示しています。ただし、を実行するgit log --follow filenameと、履歴はマージで停止し、以前のコミットは表示されません。-M代わりに使用してみましたが--follow、それも機能しません。マージ前の特定のファイルのコミットのログを取得するにはどうすればよいですか?

0 投票する
1 に答える
119 参照

git - 並列再帰 Git サブモジュール

当社では、いくつかのフレームワーク/ライブラリを重ねてプロジェクトを作成しています。

これまでのところ、すべてのプロジェクトとフレームワークを含む大きな git リポジトリを使用しており、git サブツリーを使用してフレームワークのみを分割して公開しています (オープン ソースです)。

この大きなリポジトリを異なるプロジェクトに分割できるようにしたいのですが、再帰的な依存関係が非常に多いという事実が心配です:

私の知る限り、両方の git サブモジュール/git サブツリーでは、すべてのライブラリ コードがメイン リポジトリ内にある必要があるため、次のようなプロジェクト構造になります。

フレームワークのコピーがどこにでもたくさんあるのは好きではありません。また、フレームワーク フォルダーが階層内で非常に深くなるという事実も好きではありません。

私たちが望むのは、プロジェクト A リポジトリがプル時に、現在のリポジトリと並んでいくつかの SHA を含むリポジトリがあることをアサートし、この SHA をチェックすることです。

git サブモジュール/サブツリーを並べて作成する方法はありますか?

0 投票する
3 に答える
8976 参照

git - ソース管理下のコードで使用されるサードパーティのソースとバイナリの管理

私はソース管理下にある大きなコードベースを持っています(以前はSubversionでしたが、現在はgitです)。コードをコンパイルしてテストを実行するために、サードパーティのライブラリのセットを使用します。これらのライブラリはいくつかのカテゴリに分類できますL

  • バイナリのみ
  • サードパーティのソース
  • サードパーティのソース+ローカルの変更

各ライブラリには、{Windows、Linux} X {デバッグ、リリース} X {32ビット、64ビット}構成があります。さらに、これらのライブラリは時間とともに進化し、プロジェクトのさまざまなバージョンがこれらのライブラリのさまざまなバージョン/ビルドを使用します。

私の質問は、これらのサードパーティを保存するための最良の方法は何ですか?

これが私の好みのセットです:

  1. プロジェクトソースリポジトリのサイズを小さく保つ
  2. プロジェクトソースをサードパーティと同期させて、いつでも古いバージョンをコンパイルして実行できるようにします
  3. 管理が簡単
  4. クロスプラットフォーム

私はいくつかの解決策を試し、考えましたが、どちらも満足のいくものではありませんでした。

  1. バージョン管理されたスクリプトを使用して、ライブラリのすべてのバージョンを保持する手動で管理されたftpサーバーからバイナリをフェッチします。これは機能しますが、サーバー上のディレクトリ構造を注意深く管理する必要があります。誰かがバイナリの1つを新しいビルドで上書きする可能性があるため、エラーが発生しやすくなります。
  2. SVN外部-当時、SVN外部は特定のタグを参照できませんでした。今日はgitを使っています。
  3. Gitサブモジュール-巨大になる可能性のある外部リポジトリ全体をプルします。または、ライブラリごとに個別のリポジトリを管理する必要があります。サブモジュールは特定のタグを指します。これは、一部だけが必要なときにすべての外部を取得するか、gitツリーで奇妙なファイルシステムを模倣することを意味します。

サードパーティのソースをベンダーブランチのgitに保存する必要があることは明らかですが、バイナリとヘッダーは別の話です。

0 投票する
3 に答える
5271 参照

git - gitsubtreemergeとgit-subtreeの違いは何ですか

しばらく前にメインのgitリポジトリの一部になったgit-subtreeツールを見つけました https://github.com/apenwarr/git-subtree/

ただし、このツールが既存の「gitread-tree」+「gitmerge-ssubtree」に対してどのような機能を提供するのか完全には理解していません。git-subtreeの唯一の目的は、結果のコミット履歴の見栄えを良くすることですか、それとも私が見落としていたより多くの機能を備えていることですか?

0 投票する
1 に答える
484 参照

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/ 内のすべてが子になることができます。テンプレートの/ ?