1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み] .gitignoreと "以下の未追跡の作業ツリーファイルはチェックアウトで上書きされます"

2021-12-31 21:18:23

質問

プロジェクトでgitを使用していますが、.gitignoreファイルは以下の通りです。

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

を実行すると git status と表示され、以下のようなコンソールが表示されます。

# On branch latest
nothing to commit (working directory clean)

一度、ブランチを変更しようとすると git checkout develop というエラーが発生します。

My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
    public/system/images/9/thumb/red-stripe.jpg
    public/system/images/9/original/red-stripe.jpg
    public/system/images/8/thumb/red-stripe-red.jpg
    public/system/images/8/original/red-stripe-red.jpg
    public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
    public/system/images/7/thumb/red-stripe-dark.jpg
    public/system/images/7/original/red-stripe-dark.jpg
    public/system/images/7/original/DSC07833.JPG
    public/system/images/6/thumb/red-stripe-bw.jpg
    public/system/images/6/original/website-logo.png
    public/system/images/6/original/red-stripe-bw.jpg
    public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/5/original/logocompv-colored-squares-100px.png
    public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/4/thumb/DSC_0001.JPG
    public/system/images/4/original/logo.png
    public/system/images/4/original/DSC_0001.JPG
    public/system/images/4/original/2-up.jpg
    public/system/images/3/thumb/logo2.gif
    public/system/images/3/original/logo2.gif
    public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/3/original/11002000962.jpg
    public/system/images/2/thumb/Profile Pic.jpg
    public/system/images/2/original/Profile Pic.jpg
    public/system/images/2/original/02 Login Screen.jpg
    public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting

これらのファイルを削除せずにブランチを切り替えるには、どうすればよいのでしょうか?

変更を加えた場合、それらのファイルに影響を及ぼしますか?言い換えれば、もし私がその後このブランチに戻ってきたら、すべてが最新のコミットまで完璧になるのでしょうか?

これらのファイルを失いたくないのですが、追跡されたくないだけです。

解決方法は?

すでにコミットされているファイルを無視したいようですが、どうすればよいですか?.gitignoreはすでにリポジトリにあるファイルには効果がないので、それらを削除するには git rm --cached . その --cached を指定すると、作業コピーに影響を与えず、次にコミットするときに削除されたものとしてマークされるだけです。ファイルがリポジトリから削除された後は、.gitignoreによって再び追加されることはありません。

しかし、この.gitignoreには別の問題があります。ワイルドカードを過剰に使用しているため、期待したよりもマッチングが悪くなっているのです。代わりに、.gitignore を変更して次のようにしてみましょう。

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/