2

私は Git の使い方を学ぼうとしています。プルやプッシュなどの基本はある程度理解できましたが、削除について混乱しています。

これは私が行ったことです(fortrabbitとlaravelを使用):

  • Laravel プロジェクトを作成しました
  • git init .プロジェクトフォルダで実行
  • 走るgit remote add origin ...
  • 走るgit add -A
  • 走るgit commit -am 'Initial'
  • 走るgit push -u origin master

これで、ローカル コピーがリモート コピーと一致します。

ファイルを削除したいので、テストファイルを作成します。

  • 走るtouch testfile1.php

ファイルを追加し、コミットしてからプッシュします。これで、ローカルとリモートにテスト ファイルができました。

問題はそれを削除することです。この質問は 2 つの部分に分かれています。

この SO の質問を読む: How can I delete a file from git repo? それは私がすべきだと言っています:

  • git rm testfile1.php
  • git commit -m 'deleted file'
  • git push origin master

ただし、それはローカル コピーのみを削除します。リモートコピーはまだあります!

ローカル コピーから削除すると、リモート バージョンからもどのように削除されますか?

2 番目の質問は、他の誰かがコピーを持っている場合、私がファイルを削除したことをどのようにして知ることができるのでしょうか? 彼らが自分のコピーをリモートにプッシュした場合、削除されたファイルが再び追加されるだけではないでしょうか?

どんな助けでも大歓迎です。

編集

これはコマンドの出力と、git rmコマンド後のリモート バージョンです。

ここに画像の説明を入力 ここに画像の説明を入力

最初の画像は、git rm testfile1.phpファイルを入力している私です。次に、出力rm testfile1.phpしてプロンプトに戻ります。リモート バージョンに SSH で戻ると、testfile`.php はまだそこにあります:/

別の編集

Fortrabbit が提供するいくつかのヘルプ記事を読んでいます。主に次の記事です: http://help.fortrabbit.com/git#toc-behind-the-scenes

上書きすると書いてありますが、削除はしません。

これが git が最新だと言っているのに、ファイルがまだ Web ルートにある理由でしょうか? もしそうなら、どのような理由で私が削除を依頼したファイルを削除しない可能性があるのでしょうか?!

4

6 に答える 6

1

この質問は、実際には Fortrabbit に固有のものです: http://help.fortrabbit.com/git#toc-overwrite-but-not-delete

上書きするが削除しない

古いファイルは、Git を介して更新されたファイルで上書きされます。ただし、Git のデプロイでは何も削除されません。そのため、Git リポジトリからファイルを削除しても、そのファイルは Web スペースに残ります。

これは、「ランタイム コンテンツ」を処理するための安全なデフォルトです。画像アップロード フォームのようなものを実装すると、追加のコンテンツが Web スペースにアップロードされます。これらのファイルは、Web スペース上で直接生成されます。したがって、それらは Git リポジトリの一部ではありません。しかし、ほとんどの場合、コードの変更をプッシュするたびにこれらを削除したくないでしょう。

fortrabbit.yml ファイルでその動作を構成できます。

http://help.fortrabbit.com/deployment-file

ファイルの内容は次のとおりです。

version: 1 
strategy: fullsync
excludes:
     - app/storage/ 
     - uploads/
     - vendor/

fullsync は、Web サーバーのコンテンツがローカル リポジトリとまったく同じであることを意味します。excludes キーは、自動同期しないフォルダーを指定します (アバターなどのユーザー データを含む可能性のあるすべてのフォルダー、またはベンダー フォルダーのように git にはないがアプリケーションで必要とされるものをそこに配置する必要があります)。

于 2015-07-29T17:40:34.843 に答える
0

「git commit -a」の使用</p>

次のコミットで、作業ツリー内の追跡されたファイルのすべての変更を記録し、作業ツリーから削除されたファイルのすべての削除を rm (git rm ではなく) で記録する必要がある場合は、git commit -a を使用します。すべての削除を自動的に認識して記録します。git add -u を使用して、コミットせずに同様の効果を得ることもできます。

于 2015-07-29T14:57:22.270 に答える
0

初め:

rm testfile1.php

それで:

git add .
git commit -m 'message'
git push

私の日常業務では、ファイルの作成、変更、または削除に関係なく、最後の 3 つのステップは同じです。それは私にとってはうまくいきます。

于 2015-07-29T15:38:47.203 に答える
0

ファイルをローカルで削除する

 rm testfile1.php

それから実行し、

 git rm testfile1.php
 git commit -m 'deleted file'
 git push origin master

(これは私が日常生活で行っている方法です。)

ファイルを削除して変更を正常にプッシュすると、他のユーザーは変更が反映されるまで自分pullの変更をプッシュできなくなります。そのプロセス中に、ファイルはリポジトリのクローンから削除されます。同じファイルにローカルでコミットされた変更がある場合、競合が発生することがあります。これは、ファイルがリモートで削除され、ローカルで変更されたことを示します。彼らは競合を解決してから更新をプッシュできます

于 2015-07-29T14:54:54.767 に答える