問題タブ [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 subtree
すると、それが作成されたのと同じリポジトリに作成されます。これは、その時点でリポジトリ内に 2 つの完全に独立したツリーが含まれ、共通の親がまったくないことを意味します。
この新しいツリーを独自のリポジトリに移動するにはどうすればよいでしょうか?
git - git-サブツリーは、ロットと深くネストされたサブツリーを持つリポジトリに対して安定していますか?
現在、かなりの数(25)のサブモジュールを使用しているCMS/フレームワークのリポジトリを維持しています。サブモジュールのすべての欠点のために、私はむしろAvery Pennarunのgit-subtreeに切り替えたいと思います(注: git subtreeマージ戦略ではありません)が、git-subtreeが本当に安定しているかどうか疑問に思うので、この時点では躊躇しています私のような「大きなリポジトリ/たくさんのサブツリー/深くネストされた/たくさんのフラックス」シナリオ。
私は難しい方法を学ばなければならなかったので、それgit subtree merge strategy
は私のリポジトリ/シナリオを完全に扱うことができないので、事前にgit-subtreeでオッズを評価したいと思います。
git - Git サブツリー: リポジトリ全体ではなくサブリポジトリのみを使用する
サードパーティのライブラリを使用するプロジェクトがあります。したがって、ディレクトリ構造は次のようになります。
ライブラリは別々のリポジトリにあります。したがって、サードパーティのライブラリに git リポジトリを使用したい場合は、次のようにします。
ただし、lib1.git リポジトリ内には、必要な bin フォルダーが 1 つだけあります。ドキュメント、サンプルなどのフォルダーも含まれています。リポジトリ全体ではなく、リポジトリを lib1/bin フォルダーにのみ「接続」するにはどうすればよいですか? それは可能ですか?
git - ブランチをインクリメンタルに使用してサブツリーを抽出する
git-subtree
プロジェクトからディレクトリを抽出するために使用しています。
これが最初にプロジェクトを開始したい方法であるとすれば(具体的には no ) 、連続した実行でからへ--rejoin
の変更のみを分割するにはどうすればよいですか?origin/master
SubProject
小規模なプロジェクトの場合、これはうまく機能しています。プロジェクトを分割するのに 5 秒ほどかかります。ただし、大規模なリポジトリでは、これにはかなりの時間がかかる場合があります。分割ごとに最大5分かかることがわかりました。私が取り組みたいプロジェクトの中には、1 つのリポジトリに 45 以上のサブプロジェクトがあるものがあります。
うまくいくかもしれないと思った多くのことを試しましたが、それぞれが何らかの形で失敗しました。私の要件は次のとおりです。
- 決していじって
origin/master
はいけません(そのため、ほとんどの場合--rejoin
、問題外です) - 余分なマージ コミットを追加してはなりません (考えてみてください:
--ff-only
から新しい変更を取得するときorigin/master
) 。 SubProject
リポジトリには安定したコミット ID が必要です。への 1 つまたは複数の増分更新の後SubProject
、この投稿の上部にある元のコマンドを再実行した場合に取得されるのと同じコミット ID が履歴に含まれている必要があります。- 自動化する必要があり、手動による介入は必要ありません
複雑なソリューションを恐れていませんが、自動化する必要があります。履歴の変更による失敗は問題ありません。その時点で、スクリプトはフォールバックして全体をゼロから構築できます。その場合、ユーザーは自分が何をしたかを知っているので、最初から再構築するという非常に長いプロセスを経なければなりません。:)
--再参加
によって追加された変更された履歴のコンテナーになるように、 around--rejoin
の余分なコピーを使用して保持しようとしました。ここで私が遭遇した問題は、介入することも介入することもできなかったことです。自動化された方法でこれを行う必要があるため、これは受け入れられませんでした。origin/master
--rejoin
git rebase origin/master
git merge --ff-only origin/master
マージコミット
思い通りに動作させることができましgit merge origin/master
たが、マージコミットが発生しました。このマージ コミットは上流に行くことはないので、今後の履歴を予測することは不可能git subtree split
であり、元の環境での新しいものは同じ正確な履歴を再現することはできません。私はこれについて間違っている可能性があります。もしそうなら、これがどのように安全になるかを私に説明してください. :)
コミット範囲
コミット範囲を使用して実験したSubProject
ところ、特定の時点からHEAD
. これは、コミット ID の新しいセットを生成するように見える場合を除いて、おそらく機能するため、これはオプションではないと思います。
git - git pull サブツリーはすべてを削除します
私は、他のレポを参照するレポを持つことができるgitのサブツリー機能を利用しようとしているため、両方のレポのすべてのファイルがあるように見えます。私はこことここでいくつかのイントロを読み、それらに従おうとしました.
だから私はgitハブに2つのリポジトリを持っています。私はこれをします
今、私は自分のファイル sys を見て、両方のリポジトリからのすべてのファイルを見て、すべてが素晴らしいです。それから私はします
両方のローカルリポジトリのすべてが削除されているようです。実際、最初にそれを行います
すべてのファイルで、すべてのファイルが赤と緑の + と - で表示されるマージを実行しているように見えます。
すべてのファイル
だから私は何が間違っているのか分かりませんが、明らかにそれは何かです.
どんな助けでもいただければ幸いです
=== 編集 コマンドを変更し続けて申し訳ありません。この時点で少し揚げ物ですが、これが私が使用している構文だと思います
git - gitサブツリーにサブツリーを含めることはできますか?
私はいくつかのJavaクラスを必要とするRパッケージを書いています。これらのJavaクラスはPythonプロジェクトで見つかりました(ライセンスは互換性があり、元の作成者はサポートしています)。Pythonプロジェクト全体を含めたくはありません。幸い、必要なものがすべて揃っているサブディレクトリは1つだけです。gitサブツリーは、元の(python)リポジトリからプッシュ/プルできるような方法でそのようなことを行うことができますか?1つの解決策は、別のプロジェクトでJava部分を除外し、PythonとRプロジェクトの両方のサブツリーをその1つにすることです。残念ながら、元のプロジェクトにはそのような制御はありません。ありがとう
git - git サブディレクトリの git init
いくつかのサブディレクトリを持つ git リポジトリがあります。
友人と共有したいotherstuff
のですが、bitbucket でこれを行う予定でした。彼らはそれを複製して変更をプッシュできるはずですotherstuff
が、私は彼らがアクセスできないようにしたくありません(またsrc
、mystuff
それらが存在することさえわかりません)。
どうすればいいですか?私はほとんど入ってcd ~/src/otherstuff
やりましたがgit init
、git remote add origin ssh://git@bitbucket.org/wim_glenn/...
すでにバージョン管理下にあるときに git init を再度実行することについて、何かが正しくないにおいがします。
git - 「git subtree」を介してマージされた外部の git リポジトリを追跡する
複数のプロジェクトで共有コードと外部依存関係を管理するための適切なパターンを確立しようとしています。他の場所で十分に文書化されている理由により、サブモジュールの使用には十分な落とし穴があり、私はそれを避ける傾向があります。git 1.8 の時点で subtree コマンドが組み込まれており、私が気にかけていることの多くをカバーしているように見えますが、欠けていると思われるいくつかのコア シナリオがまだあります。公式のサブツリー機能の上に、ギャップを埋めるスクリプトを誰かが書いてくれることを期待していました。
不足しているように思われるのは次のとおりです。
- サブツリーを介して追加されたものと、指定されたブランチを追跡します
- する能力
git subtree pull-all
とpush-all
- 最後の一部として、サブツリーを特定のコミットまたはブランチ内の最新のコミットにロックするかどうかを指定する機能。
これらはコマンドに組み込まれているのでしょうか。それらの使用方法に何か不足しているだけですか? また、何かに影響する場合に備えて、これが Windows で動作する必要があるという要件もあります。
ありがとう、
git - 単純なアップストリームの変更をマージすると、Git Subtree Merging レポートの競合が発生する
私はgit 1.8.2でサブツリーのマージを学び始めています。メイン プロジェクトに移行するサード パーティのリポジトリへの変更をテストする簡単な例を作成しました。
私は6.7 Git Tools - Subtree Mergingの例に従っています。
「サブ」プロジェクトは、「メイン」プロジェクトのサブディレクトリとして含まれています。
「サブ」プロジェクトに変更を加えた後、その変更を「メイン」プロジェクトにマージしようとすると、git が競合を報告します。
テストのまとめ
- プロジェクト 'main' および 'sub' (ラックではなくサブ) のリポジトリを作成しました
- sub_remote という名前のリモートを、サブを参照するメインに追加します
- sub_branch を使用して sub_remote を追跡する
- 「サブ」プロジェクトのファイルの 1 行を変更してコミットする
- sub から main/sub_branch に変更をプルします
- main/sub_branch を main/master にマージします。
マージは競合で失敗します。Merge は、変更された行のどのバージョンを保持するかについて混乱しています。
完全なテスト スクリプト
git - 削除された git サブツリー フォルダの履歴を削除するには?
git-subtree を使用して git リポジトリを追加しました。問題は、リポジトリが git-subtree で追加される前にハード リセットを行ったことです。現在、コミット履歴はまだリポジトリにありますが、マスターから切断されています。
それを削除する方法はありますか?git rm --cached を試してみましたが、うまくいきませんでした。