3

私は新しいサイトの開発中にGit/Beanstalkを使用してきましたが、ローカルサーバーからステージングサーバーに変更をプッシュするのに驚異的に機能しました。私は今、本番サーバーで「ライブ」に移行したいと思っており、通常の手順が何であるか疑問に思っていました(他のリンクの多くはこれをカバーしていません...)。

ステージングサーバーから過去6か月間に行った何千もの変更をプッシュするのではなく、この新しい本番サーバーで「新しく」やり直したいと思います。これを行う方法はありますか?新しいリポジトリを作成したり、古いリポジトリを削除したりするだけですか?履歴をクリアして、ステージングサーバーにあるものを取得し、それをプッシュする(またはローカルサーバーからプッシュする)にはどうすればよいですか。私はTowerを使用しているので、Gitについて十分に知っているので、ほとんど問題は発生しません(コマンドラインは私のものではありません)。すべてをまとめて、「これはバージョン1.0です、ここから始めましょう」というようなことを言ってもらえますか?

また、キャッシュファイルや画像などを無視するのはちょっと怠惰でした。事後にそれらの.gitignoreファイルを簡単に追加できますか?

4

3 に答える 3

4

Beanstalkは、ファイルの最新バージョンのみをデプロイすることに注意してください(または他のリビジョンが必要な場合)。したがって、本番サーバーを追加すると、Beanstalkは現在リポジトリにあるすべてのファイルを本番サーバーにアップロードします。

変更によって変更が展開されることはないため、「履歴」によって速度が低下したり、スペースが使用されたりすることはありません。

于 2012-12-20T11:25:40.910 に答える
3

エイドリアンが言うように、Gitにあるべきではないバイナリファイルが多数ある場合を除いて、これは実際には問題ではありません(たとえば、画像のアップロードなど)。個人的には、デバッグに非常に貴重であるため、履歴を削除することはしませんが、コミットする内容と頻度についてはかなり規律があります。

以前に追加したリポジトリからファイルを削除したいが、ローカルコピーを保持したい場合は、次のようにします。

git rm --cached / path / to / remove

これにより、インデックスの現在の状態からそれらが削除されますが、実際のファイルは保持され、.gitignoreに追加できます。これは、誤ってgitに追加したばかりのファイルや、リポジトリのサイズやセキュリティを気にしない小さなファイルに便利です。

ただし、以前にファイルをコミットしたことがある場合、それらは引き続き履歴に残るため、リポジトリの合計サイズが大きくなる可能性があります(たとえば、過去にPSDまたはいくつかの大きな画像を追加した場合。ファイルを完全に削除する場合)あなたの履歴から(機密データが何らかの形で忍び込んだ場合にも便利です)、次のことができます。

git filter-branch --index-filter 'git rm --cached --ignore-unmatch <NAME OF FILE>' --prune-empty --tag-name-filter cat -- --all

このコマンドは、すべてのブランチとタグの履歴全体を実行し、指定したファイルに関連するコミットとその後のコミットを変更します。後で空になるコミット(Rakefileのみを変更したため)は完全に削除されます。警告:既存のタグも上書きされます。

ファイルを削除したら、次のコマンドで変更を強制的にプッシュする必要がある場合があります。

git push <remote> <branch> --force

ただし、リモートの履歴も上書きするため、その時点で正しいことを実行していることを確認する必要があります。その時点で、履歴は実際に削除されます。このルートをたどると、ここに優れた、より詳細なチュートリアルがあります。

ただし、Beanstalkを使用している場合、これは大きな問題ではありません。これは、リポジトリ/履歴全体ではなく、ファイルの最新バージョンのみをデプロイするためです。

于 2012-12-20T10:43:16.813 に答える
2

gitリポジトリが本当に大きくない限り(誤って大量のメディアファイルを追加したなどの理由で)、これを行う意味はほとんどありません。バージョン管理の全体的なポイントは、変更の履歴を保持することです。これにより、何かが追加された時期と理由を振り返って確認できます。チュートリアルでこれをカバーしていない理由は、通常のgitの使用方法ではないためです。

あなたがこれをやりたいと思う唯一の理由は、gitに属していないファイル(大きなメディアファイル、キャッシュなど)をたくさん追加した場合です。これらのファイルはその後削除され、プッシュするのに長い時間がかかります。本番サーバー(ファイルから始めるのを忘れたと言ったので.gitignore)。すべてのテキストファイルはgitで圧縮されているため、コミットの数を気にする必要はありません(比較のために、PHPソースコードには70,000を超えるコミットがあり、14年前にさかのぼります。Linuxカーネルには300,000を超えるコミットがあります。他の成功したオープンソースプロジェクトもこのようなものです-したがって、1000のコミットを行ったとしても、gitが処理できるものの表面をかろうじて引っ掻いているだけです)。

その場合、あなたが話しているのは、履歴全体を消去し、新しい空のgitリポジトリを作成することです。ディレクトリを削除し/.git、新しいディレクトリを初期化するだけです(Towerまたはコマンドラインからgit init)。

新しいリポジトリを作成してからステージングサーバーにプッシュしようとすると、このオプションを使用する必要があり--forceます。そうしないと、履歴を書き換えようとしているというメッセージが表示されます。[プッシュ]をクリックすると、タワーにも同様の力のチェックボックスが表示されます。

あなたは確かに.gitignore事後にファイルを追加することができます。ただし、これによって以前にリポジトリに追加したファイルは削除されないことに注意してください。したがって、最初からファイルをコミットしないようにすることをお勧めします。そうしないと、ファイルがリポジトリの履歴に永続的に残ります(履歴を書き換えて、古いコミットからでもファイルのすべてのトレースを適切に削除する方法がありますが、それらは困難であり、この答え)。

于 2012-12-20T03:39:46.120 に答える