2

クライアント サイトを作成するために複製する「ベース サイト」を含むベース リポジトリがあるので、作業を行い、コミットを行い、クライアント フォークにプッシュすると、コミットの途中で 1 つ以上の必要があることに気付きます。ベースリポジトリにマージされます。それが私がしたことです:

git フォーマット パッチ -1 SHA

次に、「ベース サイト」リポジトリに移動して、次の操作を行います。

git am -3 patch_file

大丈夫です。問題は、「ベース サイト」からクライアント リポジトリに変更をプルしたいときに、コミットが複製されることです。

それを回避する方法はありますか?多分別のワークフロー?

編集:

実際、私はまだ問題を抱えています。私の説明はそれほど明確ではありません。もう一度試してみましょう:

「docs」、「layout」、「pub」、および「sql」フォルダーを含む基本リポジトリがあります。「docs」および「layout」フォルダーには空の「index.html」だけがあります。「pub」フォルダーに Joomla をインストールしました。

私が新しいクライアントを持っているとき、私は彼のディレクトリを作成してリポジトリを初期化します。次に、ベースベアリポジトリを指すリモート「ベース」を追加し、それをフェッチし、ベース/マスターをチェックアウトしてから、「チェックアウト -b マスター」を実行してマスターを作成しますベースの master ブランチからのブランチ。次に、ローカル サーバーで 'clone --bare' を作成し、それからローカル ワークステーションでクローンを作成します。必要に応じてドキュメントを保存し、デザイナーがレイアウトを作成し、すべてがコミットされてクライアントのベア リポジトリにプッシュされます。ローカル リポジトリが最新であることを確認するために、プッシュする前に常に「オリジン/マスターのリベース」を行います。

レイアウトが完成してプッシュしたら、それをプルして Joomla テンプレートの作成を開始します。そのため、多くのコミットを行った後、Joomla コンポーネントを変更して、正常に機能させる必要があることに気付きました。わかりました、コンポーネントを変更し、コミットして、テンプレートの作成を続行し、コミットします...

ここで、すべてのクライアントに同じ変更を加えたいので、すべてのコンポーネントのコミットを「ベース リポジトリ」に移動します。@jleedev ソリューションを試したところ、クライアントのすべてのコミットが一番上に移動し、クライアントのベア リポジトリに既に存在していた SHA が書き換えられました。

何か案は?

ありがとう!

4

1 に答える 1

3

はい!このgit-pullコマンドは、フェッチに続いてマージを実行します。同じパッチが異なる名前の2つのコミットとして表現されているため、マージはあなたに怒鳴ります。

git-pull --rebase、または に相当する 2 ステップを実行すると、git fetch; git rebase origin/masterローカルの変更がアップストリームにリベースされます。

レポが次のようになっているとしましょう。masterクライアントで行った作業が含まれておりorigin/master、電子メールで送信されたパッチを適用した上流のベースを表しています。フェッチすると、2 つの分岐ブランチが表示されますが、エクスポートしたコミットは両方の行にあります。

~/client-site$ git fetch origin master

GitX では次のようになります。

取得後 http://grab.by/m1T

リベースclientすると、 にないすべてのコミットが取得されbase、それらがコミットからパッチに変換され、上流のヘッドに 1 つずつ適用されます。2 つのコミットが同じパッチを表現していることに気付くと、それらは 1 つにまとめられます (アップストリームのコミットは存続し、ローカルのコミットは終了します)。

~/client-site$ git rebase origin/master

リベース後 http://grab.by/m1X

@roe が言及しているように、必要なコミットを選択してプッシュするなど、リポジトリの同期を維持するためのより良い方法がおそらくあります。リベースするときに問題が発生する可能性は十分にありますが、format-patch と am を使用してパッチをエクスポートするワークフローを説明した方法はかなり安全に思えます。

于 2009-11-08T21:51:10.817 に答える