そこで、.gitignoreファイルにフォルダを追加しました。
git status` を実行すると、次のように表示されます。
# On branch latest
nothing to commit (working directory clean)
しかし、ブランチを変更しようとすると以下のようになります。
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 ファイルの姿です。
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
どうすればこれらのファイルを削除せずにブランチを切り替えられるようになるでしょうか?
私が変更を加えた場合、それらのファイルに影響を与えますか?言い換えれば、後からこのブランチに戻ってきても、最新のコミットまでのすべてが完璧になるのでしょうか?
私はこれらのファイルを失いたくはありませんが、追跡されたくはありません。
私もこのメッセージを見ました。私の場合は、ファイルを残したくなかったので、これでうまくいきました。
git clean -d -f .
git clean -d -f ""
git が無視するファイルも削除したい場合は、次のコマンドを実行してください。
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
x`は、無視されたファイルや、gitにとって未知のファイルも削除されることを意味します。
d` は、トラックされていないファイルに加えて、トラックされていないディレクトリも削除することを意味します。
強制的に実行するには -f
が必要です。
ファイルを無視したいようですが、すでにコミットされてしまっています。.gitignore はすでにレポに入っているファイルには影響しないので、git rm --cached
で削除する必要があります。--cached` は作業コピーに影響を与えないようにするためのもので、次回のコミット時に削除されたものとしてマークされます。リポジトリからファイルを削除した後は、.gitignore を設定することで再び追加されることを防ぎます。
しかし、この .gitignore には別の問題があります。ワイルドカードを使いすぎて、期待したよりもマッチしなくなってしまったのです。そこで、.gitignore を変更して次のようにします。
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Git はファイル (名前は public/system/images/9/...
など) を作ろうとしているのですが、そのディレクトリにはすでに Git が追跡していない既存のファイルがあります。おそらく、誰かがそれらのファイルを Git リポジトリに追加して、そのブランチに切り替えたのが初めてなのでしょう。
それらのファイルが develop
ブランチにあって現在のブランチにないのは、おそらく何か理由があるのでしょう。その理由を共同研究者に聞いてみる必要があるかもしれません。
どうすれば、これらのファイルを削除せずにブランチを切り替えることができるのでしょうか?
どうにかしてファイルを消してしまわないとできません。とりあえず、public
をmy_public
にリネームするとか、そういうことはできるでしょう。
その後、このブランチに戻ってきた場合、最新のコミットまですべてが完璧になるのでしょうか?
変更をコミットすれば、Git がそれを失うことはありません。もしあなたが変更をコミットしなければ、Gitはあなたが行った作業を上書きしないように*一生懸命努力します。これが、今回の最初の例(ブランチを切り替えようとしたとき)でGitが警告していることです。