問題タブ [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 - ファイル履歴を壊さずに 2 つの Git リポジトリをマージする
2 つの Git リポジトリを新しい 3 つ目のリポジトリにマージする必要があります。サブツリーのマージを使用してこれを行う方法についての多くの説明を見つけました (たとえば、2 つの Git リポジトリをどのようにマージしますか?に関するJakub Narębski の回答) 。古いリポジトリからのファイルは、新しく追加されたファイルとして記録されます。実行すると、古いリポジトリからのコミット履歴を確認できますが、実行すると、そのファイルのコミットが 1 つだけ表示されます - サブツリー マージ。上記の回答に対するコメントから判断すると、この問題を目にしたのは私だけではありませんが、公開された解決策は見つかりませんでした。git log
git log <file>
リポジトリをマージして個々のファイル履歴をそのまま残す方法はありますか?
git - Git サブツリー - リソース コードの同期を保つ
2 つのプロジェクト A と B を呼び出しましょう。それぞれの構造は次のとおりです。
/Foo/core/のコンテンツが存在し、A と B でローカルに同期している必要があります。つまり、プロジェクト A で bar.txt を編集すると、同じマシンのプロジェクト B でその変更を取得できるはずです。 、 およびその逆。
「Core」という名前のプロジェクトを作成して、それを A と B のサブモジュールにしようとしました。問題は、bar.txt を編集してリモートにプッシュしてから A をプッシュすると、明らかにコードを取得できないことです。サブモジュールの更新を伴うプロジェクト B で。同じプロジェクトではありません。
サブツリーのマージも試しました。問題は、「コア」がスタンドアロン プロジェクトであることを意図しておらず、そのまま開発できないことです。それは単なるリソースファイルであり、より大きなもののための共通の機能です。したがって、私は自分の bar.txt を A と B のいずれかで編集し、特にこのプロジェクトの一部としてそこでテストし、他のプロジェクトで何らかの形で取得してテストできるようにしたいと考えています。
Git Book のサブツリーのマージに関する章では、次のように述べられています。
[...] master ブランチの rack サブディレクトリに変更を加えてから、後でそれらを rack_branch ブランチにマージして、メンテナに送信するか、上流にプッシュすることができます。
しかし、どうすればよいのか、2 つのローカル フォルダを同期させる方法については説明されていません。
git - git svn は git サブツリーと互換性がありますか?
git サブツリーがコア git ディストリビューション (1.8.0 の時点で Msysgit でも) にマージされたので、git svn が git サブツリーで動作するかどうか知っている人はいますか?
注: サブツリーのマージ戦略についてではなく、これについて話しています。
git svn を使用している場合、Git サブモジュールを直接使用することはできません。代わりに、別のレベルの間接化が必要です。さらに、サードパーティのリポジトリを追跡する場合は、git サブツリー ワークフローがより便利です。これは、svn も使用する場合に発生します。
私の質問は、git svn で使用したときに git サブツリーに問題があるかどうかを確認するにはどうすればよいですか?
git-svn - Git svn サブツリー ワークフロー
プロジェクト B のローカルフォークを含むプロジェクト Aがあります。つまり、プロジェクト B の潜在的に変更されたソースは、プロジェクト A のサブツリーに含まれています。プロジェクト A は svn を使用し、プロジェクト B は git を使用します。
プロジェクト A のローカル コピーに git を使用して、次のことを行います。
- プロジェクト B のアップストリームの変更をプロジェクト Aにマージできます。
- プロジェクト A に含まれるプロジェクト B のフォークへの変更の一部 (すべてではない) をプロジェクト B に戻すことができます。
- クリーンな個々のコミット(押しつぶされない) がプロジェクト A (git-svn 経由) とプロジェクト B (git 経由) の両方に送信されるようにします。
私は git-svn と git-subtree の機能を組み合わせたソリューションを見つけようと懸命に努力してきました (独自のソース ツリーが必要なため、git-submodule は論外です)。しかし、私は完璧な解決策を見つけることができません。
git - 特定のコミットによるサブツリーのマージ
GitHub チュートリアルに従って、このようなことを行うにはどうすればよいですか?
私が望むのは、マスターや他のブランチではなく、特定のコミットです。
git - この最新の Git サブツリーをプッシュできないのはなぜですか?
いくつかの基本コードを共有するために、現在取り組んでいるいくつかのプロジェクトで Git サブツリーを使用しています。基本コードは頻繁に更新され、アップグレードはどのプロジェクトでも発生する可能性があり、最終的にはすべてのプロジェクトが更新されます。
サブツリーが最新であると git が報告しているのに、プッシュが拒否されるという問題に遭遇しました。例えば:
プッシュすると、プッシュするものが何もないというメッセージが表示されるはずです...そうですか?右?:(
この理由は何でしょうか?プッシュが失敗するのはなぜですか?
git - git で同じコア ファイルを使用して個別のプロジェクトを追跡する方法
私は git バージョン管理を使用しており、同じベース ディレクトリを使用する複数のプロジェクトがありますが、いくつかの変更はプロジェクト固有のものです。
スーパーフォルダー (私の場合は root/private/core) とパブリックおよびプライベートの両方のプロジェクト固有のディレクトリを同じ git リポジトリで追跡できる方法はありますか。また、あるプロジェクトでコア ファイルに変更を加えた場合、他のプロジェクトの git repo にも変更が加えられるようにしたいと考えています。
私が思いついた方法は、ルートフォルダーにgitリポジトリを作成してから、プロジェクトのブランチを作成し、他のプロジェクトファイルを追跡しないことです。しかし、この方法では、他のプロジェクトのコアの変更をマージする必要があり、この場合はブランチがプロジェクトとして使用されるため、一種の論理エラーもあります。
サブモジュールも調べましたが、それも最善の解決策ではないようです。プロジェクトのディレクトリ システムを変更する必要がある解決策がある場合は、それを行うことができますが、パブリック ディレクトリ、プライベート ディレクトリ、およびコア ディレクトリを別々に保持したいと考えています。
現時点での私のディレクトリの簡略化された例:
- 根
- プライベート
- 芯
- プロジェクト
- プロジェクト1
- プロジェクト2
- 公衆
- プロジェクト1
- プロジェクト2
- プライベート
プライベート プロジェクト フォルダーにはプロジェクト固有のコア php 拡張機能があり、パブリック プロジェクト フォルダーにはスタイルシート、javascript、およびインデックスのみがあります。
git - gitsparsecheckout-別のディレクトリにプルする方法
私はpootleを使用して、PHPYiiプロジェクトで.poファイルを翻訳できるようにしています。
翻訳者が.poファイルを更新すると、Pootleは翻訳をプルおよびプッシュできます。これとは別に、サイトで作業している開発者がいます。開発者は、翻訳ファイルを更新して、翻訳するテキストを追加することもできます。
Yiiでは、.poファイルを次の場所に配置する必要があります。
yii-project / protected / messages / en_gb / messages.po
Pootleでは、ディレクトリ構造が次のようになっている必要があります。
pootle / yii-project / en_GB / messages.po
pootleをプル&プッシュするには、.gitディレクトリがpootle / yii-project/.gitにある必要があります。
git sparse checkoutを使用してみましたが、ファイルがpootle / yii-project / protected / messages / en_gb / messages.poにプルされますが、残念ながらpootleはそれを取得しません。
他の場所でリポジトリをプルしてからソフトリンクを実行することはできません。そうすると、pootleは.gitディレクトリを見つけることができなくなります。
私が本当にやりたいのは、ディレクトリのスパースチェックアウトと結果を別のディレクトリにマップすることです。つまり、チェックアウトです。
pootle / yii-project / protected / messages /-> pootle / yii-project
開発者または翻訳者のいずれかがファイルを更新できるようにしたいので、git-subtreeを使用したくありません。余分なプルオーバーヘッドが気に入らないため、サブモジュールを使用したくありません。開発者には、新しい機能に関連するすべての変更を1回のコミットに含める必要があります(メインプロジェクトでの1回のコミットではなくサブモジュールに1つ)。
助言がありますか?
git - Git サブモジュールをサブツリーに変換した後のマージ エラー
私は元々、いくつかの依存コードにサブモジュールを使用していたプロジェクトを持っています。サブモジュールはこのプロジェクトにはあまり適していない (実際には使いにくい) ことが判明したため、各サブモジュールをサブツリーに変換しています (新git-subtree
機能を使用)。
私の作業リポジトリでは、各サブモジュールを正常に削除し、古いサブモジュール リポジトリをサブツリーとして追加しました。これで問題ありません。
別のクローンに移動して最初のクローンからプルしようとすると、マージ ステップで次のエラーが発生します。
これは、ファイルがsub/
そもそもメイン リポジトリに実際に存在したことがなく、Git がパッチを適用して更新するとき.gitmodules
に、サブモジュール ファイルを含むディレクトリが削除されないことが原因のようです。次のコミットを処理するときに、Gitがsub/
現在メイン リポジトリの一部である に新しいファイルを作成しようとすると、それらのファイルはすべて にまだ存在するファイルと競合します。sub/
私が見つけた回避策は、この問題を回避するrm -rf sub
beforeを使用することです。git pull
私の質問は、git merge
「作業ディレクトリにたまたま存在するファイルを上書きする」というコマンドラインスイッチはありますか? さらに良いのはgit merge
、既存のファイルの内容を確認する機能であり、作成しようとしていたファイルと内容が同じ場合は、エラー メッセージを抑制して続行します。
更新:私が話していることを正確に示すために、この問題を示すGitリポジトリを作成しました。再現するには:
これにより、エラーメッセージが表示されるはずです
git - git pullはいつ複数のブランチ間でマージを引き起こしますか?
開発ブランチに切り替えた後、gitが作業中の機能ブランチをメインの開発ブランチにマージする原因となった状況を理解しようとしています。
マージを元に戻すことはできましたが、完全に解決するのに1日の大部分を要したため、将来的には回避したいと思います。
ワークフローは次のとおりです。
機能ブランチで作業した後、バグ修正に取り組む必要があります。私の機能ブランチ(refs / heads / feature / uploader / 90)は、メインの開発ブランチに対応しています。
次に、開発ブランチに切り替える必要があります。
git出力:
ブランチ'develop'に切り替えました。ブランチは'origin/ development'より88コミット遅れており、早送りできます。
次に、プルを発行すると:
何らかの理由で、gitが私の機能ブランチをdevelopにマージすることを決定したようです。出力は次のようになります。
そして、私のコミットログは私がコミットしていることを示しています: github.com:MakerStudios/dashboardのブランチ'feature/ uploader/90'と'develop'をdevelopにマージします