私の最初のコミットはいくつかのログファイルを含んでいました。私は*log
に.gitignore
を追加しました、そして今私は自分のリポジトリからログファイルを削除したいです。
git rm mylogfile.log
リポジトリからファイルを削除しますが、ローカルファイルシステムからも削除します。
どのように私はリポジトリからこのファイルを削除することができますwithoutファイルのローカルコピーを削除しますか?
Manファイルから:
--cached
が与えられたとき、ステージングされた内容はブランチの先端かディスク上のファイルのどちらかと一致しなければならず、ファイルがインデックスから削除されることを可能にします。
だから、単一のファイルの場合:
git rm --cached mylogfile.log
そして単一のディレクトリの場合:
git rm --cached -r mydirectory
(Resharperファイルのように)リポジトリからフォルダ全体を削除するには、次の操作を行います。
git rm -r --cached folderName
私はいくつかのresharperファイルをコミットしました、そして、それらが他のプロジェクトユーザのために固執したくないです。
ローカルファイルシステムからファイルを削除せずに、.gitignoreに基づいてリポジトリからファイルを削除することもできます。
git rm --cached `git ls-files -i -X .gitignore`
あるいは、Windows Powershellでは、次のようにします。
git rm --cached $(git ls-files -i -X .gitignore)
ここに私の答えごとに: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
ディレクトリを削除する手順
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git Push Origin master
次回のコミットでそのフォルダを無視する手順
次回のコミットでそのフォルダを無視するには、ルートに .gitignore という名前のファイルを1つ作成し、その中にそのフォルダ名を入れます。あなたは好きなだけ置くことができます
.gitignore fileはこのようになります。
/FolderName
また、機密データ(パスワードを含むファイルなど)をコミットした場合は、それをリポジトリの履歴から完全に削除する必要があります。これを行う方法を説明するガイドは次のとおりです。 http://help.github.com/remove-sensitive-data/
より一般的な解決策:
.gitignore
ファイルを編集します。
ECHO mylogfile.log >> .gitignore
インデックスからすべての項目を削除します。
git rm -r -f --cached .
インデックスを再構築します。
git add .
新しいコミットをする
git commit -m "Removed mylogfile.log"
Gitでは、これらのファイルは変更されていないと見なして無視できます。これは
git update-index --assume-unchanged path/to/file.txt
コマンドを実行することによって行われます。ファイルをそのようにマークすると、gitはそのファイルに対する変更を完全に無視します。 git statusやgit diffを実行しても表示されず、またコミットされることもありません。
( https://help.github.com/articles/ignoring-files から)
したがって、それを削除するのではなく、それに対する変更を永久に無視します。これはローカルでしか機能しないと思いますので、同僚は上記と同じコマンドを実行しない限り、変更を確認できます。 (それでもこれを検証する必要があります。)
注:これは質問に直接回答するのではなく、他の回答のコメント内のフォローアップ質問に基づいています。
ファイルをアントラックするだけで、ローカルおよびリモートのリポジトリから削除したくない場合は、次のコマンドを使用します。
git update-index --assume-unchanged file_name_with_path
上記の答えは私にはうまくいきませんでした。 filter-branch
を使用して、コミットされたファイルをすべて削除しました。
Gitリポジトリからファイルを削除します。
git filter-branch --tree-filter 'rm file'
Gitリポジトリからフォルダを削除します。
git filter-branch --tree-filter 'rm -rf directory'
これにより、すべてのコミットからディレクトリまたはファイルが削除されます。
次のようにしてコミットを指定できます。
git filter-branch --tree-filter 'rm -rf directory' HEAD
または範囲:
git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD
すべてをリモートにプッシュするには、次のようにします。
git Push Origin master --force