1. ホーム
  2. ギット

[解決済み】git pullでpullするたびに強制的にすべてを上書きするには?

2022-04-17 04:15:52

質問

私はCENTRALベアリポジトリを持っており、3つの開発者リポジトリがそれに正常にプルおよびプッシュしています。

1つはライブサーバーで、もう1つはテスト/ステージサーバーで、それぞれがそれぞれのブランチからプルしています。

シナリオはこうです。私は post-update CENTRAL リポジトリのフックスクリプトは、自動的に test リポジトリと live リポジトリにアクセスし、それぞれで pull コマンドを実行します。これにより、テストサーバーとライブサーバーの両方が更新され、どのブランチに新しいコミットがあるかに応じてすべてが更新されます。これで、すべてがうまくいくようになりました。

問題は、緊急時にサーバー上のファイルを直接更新することがあります(ftp などで)。その場合、CENTRAL の更新後スクリプトはマージ/上書き競合が発生するため、失敗します。このシナリオを回避する方法はありませんし、避けられません。

私が実現させたいことは、こうです。本番サイトとテストサイトからのプルを 常に プル時に上書き/マージします。 常に これらのレポは開発用ではないため、プルオンリーになります。

いろいろと調べてみたのですが、プルダウンメニューを持つための良い解決策は見つかりませんでした。 常に は、ローカルファイルの上書きを強制します。このようなことは可能でしょうか?もし可能であれば、素晴らしい開発シナリオになると思います。

解決するには?

本当に理想的なやり方は pull を全く使用せず、代わりに fetchreset :

git fetch origin master
git reset --hard FETCH_HEAD
git clean -df

(変更する master を、追いかけたいブランチに変更します)。

pull は、何らかの方法で変更をマージすることを目的として設計されているのに対し reset は、単にローカルコピーを特定のコミットに一致させることを目的として設計されています。

とは少し異なるオプションを検討するとよいでしょう。 clean は、あなたのシステムのニーズによって異なります。