1

開発マシンとリモート テスト サーバーがあります。

開発マシンはファイル A + B + C をコミットし、既にファイル A と C を SFTP 経由で (私のエディターで) テスト サーバーに送信しています。A と C は最後のコミット以降に変更されていますが、アップロード以降に変更されている場合とされていない場合があります。

テスト サーバーには、ステージングまたはコミットしたくないステージングされていない変更 (ファイル A + Y) と追跡されていない変更 (ファイル C + Z) の両方があります。

私は通常、手動でgit checkout Aテストrm Yサーバー上で実行し (最後のコミット以降のすべての SFTP 変更を元に戻します)、コミットをプルします。次に、開発マシンに同じ A + B ファイルがあります。

pull の前に checkout/rm するファイルがさらに存在する可能性がある実際のシナリオで、テスト サーバーで checkout/rm に正確なファイルを指定する必要がないコマンドでこれを行うにはどうすればよいでしょうか?

このワークフローには、編集中のファイルでテスト サーバーを最新の状態に保ちながら、git 履歴をクリーンに保つという利点があります。

--- 解決の始まり ---

git fetch
cd `git rev-parse --show-toplevel`

git diff --name-only origin/mybranch..origin/mybranch~1|cat
// for each x in last output: rm x; git co x

git stash
git pull --rebase
git stash pop
4

2 に答える 2

2

別のパスを提案する場合は申し訳ありませんが、あなたのアプローチは、集中型の git リポジトリ構造と優れた仮想プライベート サーバーで達成できる純粋な単純さを超えて、プロセスを複雑にしているようです。

展開フローに関する私の推奨事項は、非常に基本的なものです。

  • 中央リポジトリを用意します。
  • ホストへの ssh アクセスを取得します。
  • 開発中の全員が中央リポジトリ (github または bitbucket) からプルし、デプロイされるコード用の特定のブランチ ( live、など) を使用します。それ以外はすべて開発ブランチまたは機能ブランチです。master
  • デプロイはプルのみになります。すべての変更はサーバー外で行うか、サーバー外でレプリケートしてからプルする必要があります。ライブサーバーまたはデプロイサーバーでホットフィックスコミットを作成する必要がある場合、それはいつか理解できますが、同期が外れれば離れるほど、最終的なマージまたはリベースがより苦痛になるため、できるだけ早くそれらを中央リポジトリにプッシュバックしますなれ。
  • 理想的には、デプロイ スクリプトを呼び出して、ステージング/マスター/ライブ ブランチから最新の変更をプルします。それ以外の場合は、ボックスに SSH 接続して単純な git 早送りチェックアウトを取得し、それらのファイルを展開場所にコピーするか、単純な展開スクリプトを作成します。
  • デプロイに変更を保持しないでください。常にリポジトリに保持してください。

繰り返しになりますが、SFTP によるデプロイから ssh への切り替えは簡単ではありませんが、既に git を使用しているため、視点を変える必要があります。そのため、おそらく追加された柔軟性とパワーの恩恵を受けるでしょう. ホストへの ssh アクセスが本当にできない場合は、開発者向けではない/能力の低いホストを使用している兆候であり、アップグレードの可能性について考えてください!

于 2015-03-04T18:33:37.843 に答える
1

git reset --hard最後のコミット以降のすべての変更を元に戻します。

git clean追跡されていないすべてのファイルをクリーンアップします(それも必要かどうかは投稿してもわかりません)。

それでも、あなたのワークフローは少し奇妙だと言わざるを得ません。通常、ローカル環境または仮想化された開発環境で変更をテストします。Kzqai の推奨事項に従い、ワークフローを変更する必要があるかもしれません。

于 2015-03-04T18:34:31.680 に答える