1

http://danbarber.me/using-git-for-deployment/のような git ベースのデプロイ手順を実装して、Web アプリケーションをデプロイしようとしています。基本的には、ライブ サーバー上の 2 つのリポジトリで構成されます。

  • 「ハブ」をプッシュする裸のレポ
  • 「ハブ」からプルする、Web サーバーのパブリック ディレクトリ内の通常のリポジトリ。ハブに適切な更新後のフックがある場合、これは自動的に実行されます。

問題は、私のプロジェクトには /upload/ のような多くのディレクトリがあり、開発中のサンプル データと Web サーバー上の実際のライブ データが含まれていることです。

理想的には、upload/ フォルダーをローカル リポジトリーに保持したいのですが、ライブ リポジトリーにはプルしません。さて、「部分的」引きは無理そうですよね?

したがって、最適な解決策ではない場合でも (サンプル データをローカル リポジトリに複製できません)、これらのフォルダーを無視しようとしていますが、次のようになります。

  • ローカルおよびライブリポジトリの .gitignore に upload/ フォルダーを追加しました。
  • git rm --cached upload/ で削除しました
  • プロジェクトを裸の「ハブ」リポジトリにプッシュしました
  • ハブから引っ張るライブレポで
  • エラーが表示されます: untracked working tree files would overwrite by merge...upload/xxx

upload/ フォルダーがまだどこかにあるように思えます... 実際、これを書いている間、ハブからのクローン作成、フォルダー upload/ もクローン作成されていることがわかります!

唯一の解決策は、いくつかの質問で見たように、すべてのプロジェクト履歴からフォルダーを完全に削除することですか?

これにより、別のブランチで作業している他のすべての同僚が厄介なリベースを余儀なくされるのでしょうか?

これらすべてを説明して把握するのはおそらく難しいですが、どんなアイデアでも大歓迎です。

4

2 に答える 2

2

ブランチの先頭よりも古いコミットをチェックアウトしたくないと仮定すると、すべてを行う必要はありません。

あなたがする必要があるupload/*のは、新しいコミットで排除することです。それ以降、新しいコミットを見ている人は誰でもuploadディレクトリを見ることができなくなります。

明らかにupload/*、「ハブ」そこからプルするクローンにファイルをバックアップし、コミットでアップロードを削除してから、バックアップを元の場所に戻す必要があります。これで、データはディレクトリに存在しますが、git はそれらを追跡しなくなります。

注: バックアップしない場合は、upload/*ハブ上のデータ (古いコミットをチェックアウトすることで回復可能) を削除するか、そこから引っ張ってきた人 (追跡されていない場合は git によるエラー、または追跡されていない場合は古いコミットをチェックアウトすることで回復可能)のデータを削除することになります。追跡されます)。それにもかかわらず、最初にバックアップすることをお勧めします。


例:

$ git init
$ mkdir upload
$ echo 'upload/*' > .gitignore
$ touch to_track upload/not_track
$ git add .gitignore to_track upload/not_track
$ git commit

これupload/not_trackで、リポジトリができました。

$ cp upload/not_track ../backup
$ git rm upload/not_track
$ git commit
$ mv ../backup/not_track upload/

現在、現在のディレクトリ内のファイルは変更されていませupload/not_trackんが、リポジトリにはもうありません (このコミット以降)。

于 2013-04-10T13:36:19.783 に答える
0

git レポジトリを見ないと確信が持てませんが、あなたが説明していることは起こっていないはずです。

フォルダーに隠しファイルがないか確認しましたか (たとえば、.gitignore fileそこにある、または.DS_Store(Mac フォルダー ブラウザーのキャッシュ) など)。無視されたファイルは、によって自動的に削除されませんgit rm

無視する前に git を無視した場合git rmは、それを無視から削除するか、まっすぐrmにする必要があります。

于 2013-04-10T13:37:11.623 に答える