67


26

それは私にいつも起こります。 誤ってファイルをバージョン管理しているのですが、バージョン管理されることは望ましくありません。 開発者/マシン固有の設定ファイル)

このファイルをコミットすると、他のすべての開発者用マシン上のパスが台無しになるでしょう - それらは不幸です。

バージョン管理からファイルを削除すると、他の開発者のマシンからも削除されます - 不幸です。

ファイルをコミットしないことを選択した場合は、常に「ダーティ」チェックアウトが発生します - 私は不幸です。

リビジョン管理からファイルを「バージョン解除」するためのクリーンな方法です。

edit:ファイルをリポジトリにコミットしたので、バージョン管理から削除するだけです - 特に、チェックアウトを実行しているすべての人から物理的に削除したくない場合。 私は最初それを無視したかったのです。

回答:私が2番目の回答を受け入れることができれば、それは thisになります。 それはgitに関して私の質問に答えます - 受け入れられた答えはsvnについてです。

15 Answer


62


Gitでは、ツリーからは削除しますが、作業ディレクトリからは削除しないようにするために、--cachedフラグを使用できます。

git rm  - キャッシュ


34


SVNバージョン1.5はローカルファイルを失うことなくリポジトリからファイルを削除/削除することをサポートします

新しい—​keep-localオプションは削除後もパスを保持します..

Delete(remove)はターゲットをローカルに保持するために—​keep-localオプションを使用するようになりました。そのため、パスを変更しなくてもパスは削除されません。


8


誤ってsvnにファイルを「追加」した場合


7


試したことなく…​

gitでは、もしあなたの変更が他のリポジトリに伝播されていなければ、影響を受けたファイルを git rm`することができます。 git rebase --interactive`は削除がコミットされた直後に並べ替えます。誤って問題のあるファイルを追加した後、それら2つのコミットをまとめて破棄します。

もちろん、他の誰かがあなたの変更を引っ張ったとしてもこれは役に立ちません。


5


あなたはすでにファイルを追加してsubversionにコミットしたようです(私はあなたがSubversionを使っていると思います)。 その場合、そのファイルを削除するには2つの方法しかありません。

  1. ファイルを削除済みとしてマークし、コミットします。

  2. `svnadmin dump`を実行し、リビジョンをフィルタリングします 誤ってファイルをコミットし、「svnadmin load」を実行します。

私を信頼してください、あなたは本当にナンバー2をしたくありません。 リポジトリのすべての作業コピーを無効にします。 最善の方法は、番号1を付け、ファイルに無視のマークを付けて謝罪することです。


4


svn:ignoreと.gitignoreを調べてください - これらの機能はあなたのチェックアウトの中であなたのRCSによって無視される余分なファイルを持つことを可能にします( "status"操作か何かをするとき)。

マシン固有の設定ファイルの場合、追加の ".sample"拡張子を付けた名前のファイルをチェックインすることをお勧めします。 config.xml.sample。 個々の開発者はこのファイルのコピーを `config.xml`に作成し、彼らのシステム用に微調整します。 svn:ignoreや.gitignoreを使えば、バージョン管理されていない `config.xml`ファイルがいつもダーティとして表示されないようにすることができます。

あなたの編集に応答して:あなたが今リポジトリからファイルを削除すると、あなたが開発者が次回アップデートをするときに衝突を受けるでしょう(彼ら全員が彼らのシステムのためにファイルを変更したと仮定して)。 彼らは彼らの地元の変化を失うことはありません、彼らはどこかから回復可能になるでしょう。 もし彼らがローカルの変更をしていないのであれば、それらの設定ファイルは消えますが、それらは以前のものをソース管理から取り戻してそれを使うことができます。


4


gitリポジトリからファイルを完全に削除するには(パスワードを指定してファイルをコミットした、または誤って一時ファイルをコミットしたとします)。

gitフィルターブランチ - インデックスフィルター 'git更新インデックス - ファイル名を削除' HEAD

それから、コミットして、リモートブランチにある場合は-fをプッシュする必要があると思います(リポジトリの履歴を変更し始めると人を悩ますかもしれないことを覚えておいてください.. 彼らが以前あなたから引っ張ったことがあれば、彼らはまだファイルを持っている可能性があります)


3


ソース管理下にあるファイルを削除するには

git rm

その後

git commit -m ...

無視したいすべてのファイルを.gitignoreファイルに追加する必要があります。 私は常に.gitignoreファイルを自分のリポジトリでチェックするので、誰かが自分のマシン上のコードをチェックアウトしてもファイルが再度生成されても、彼はそれを「ダーティ」とは見なしません。

もちろん、あなたがすでにファイルをコミットしていて、他の誰かが他のマシンであなたの変更を受けた場合、あなたは履歴を変更するためにすべてのローカルリポジトリを変更しなければならないでしょう。 少なくともそれはgitによる可能な解決策です。 私はsvnがあなたにそうさせるとは思わない。

ファイルがすでにマスターリポジトリ(git)またはサーバー(svn)にある場合は、別のコミットでファイルを削除する以上の方法があるとは思いません。


2


SVNでは、まだコミットしていないファイルを元に戻すことができます。 TortoiseSVNでは、コミットウィンドウでファイルを右クリックしてRevert …​を選択するだけです。

コマンドラインでsvn revert [file]を使用してください。

私はGITを使ったことがないので、GITについて知らないでください。


1


私が知っている限りでは、一度それがコミットされるとsvnのバージョン管理から追加ファイルを削除する簡単な方法はありません。

ファイルを別の場所に保存してバージョン管理から削除する必要があります。 バックアップを再度コピーするよりも。

それは結局のところバージョン管理システムです…​ ;)