gitignoreファイルを更新した後にgitリポジトリを「更新」することは可能ですか?
gitignoreにignorations(?)を追加したばかりで、新しいファイルと一致するリポジトリ内の既存のものを削除したいと考えています。
gitignoreファイルを更新した後にgitリポジトリを「更新」することは可能ですか?
gitignoreにignorations(?)を追加したばかりで、新しいファイルと一致するリポジトリ内の既存のものを削除したいと考えています。
回答:
「.gitignore file not ignoring」で言及されている解決策は少し極端ですが、機能するはずです。
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
(jball037が以下のコメントとして発生するのを防ぐために、最初に、保持したい変更をコミットしてください。
このオプションを使用しても、ディスク上のファイルは変更されません。) --cached
また、ブログの投稿「Gitが既に追跡されたファイルを無視するようにする」には、さらに詳細なソリューションがあります。
git rm --cached `git ls-files -i --exclude-standard`
のようなエラーメッセージが表示さ
fatal: path spec '...' did not match any files
れる場合は、パスにスペースが含まれているファイルがある可能性があります。あなたはオプションで他のすべてのファイルを削除することができます
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
ただし、一致しないファイルはリポジトリに残り、パスを二重引用符で囲んで明示的に削除する必要があります。
git rm --cached "<path.to.remaining.file>"
私は誤解しているかもしれませんが、新しく無視されたファイルを削除しようとしていますか、それともこれらのファイルへの新しい変更を無視しますか?この場合、問題は解決しています。
以前にコミットされた無視されたファイルを削除したい場合は、
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
git commit -m 'clean up ``
これは古い質問ですが、ファイル名にスペースが含まれている場合、gracchusの解決策は機能しません。スペースを含むファイル名に対するVonCの解決策は、それらを利用してそれらを削除しないことです--ignore-unmatch
手動で削除することですが、たくさんある場合はうまく機能しません。
これは、すべてのファイルをキャプチャするためにbash配列を利用するソリューションです。
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'