1. ホーム
  2. git

[解決済み] Sourcetree の .gitignore ファイルが機能しない

2022-02-12 22:34:29

質問

私はmavenプロジェクトで作業しており、私のプロジェクト(評価)ルートフォルダの/targetフォルダに生成され保存されたファイルを無視したいです。私のgitリポジトリのルートには、次のエントリを持つ.gitignoreファイルがあります(backendはeclipseプロジェクト評価を含む単なるフォルダです)。

backend/Evaluation/logs/
backend/Evaluation/target/

何らかの理由でSourceTreeはこれら2つのフォルダに保存されたファイルを無視せず、私のプロジェクトをコンパイルすると、/targetフォルダ内のいくつかの.classファイルであるコミットされていない変更が存在するのです。

なぜこのようなことが起こるのでしょうか?また、.gitignoreのエントリーを以下のように変更してみました。

/backend/Evaluation/logs/**

が、これもうまくいかなかった。

何か思い当たることはありますか?

解決方法は?

例えば、誤ってリポジトリに追加されたファイルがあるとします。

stackoverflow$ echo this file is important > junkfile
stackoverflow$ git add junkfile
stackoverflow$ git ci -m 'added a file'

ある時点で、このファイルは重要でないことに気がつきましたので、そのファイルを .gitignore ファイルを作成します。

stackoverflow$ echo junkfile >> .gitignore
stackoverflow$ git ci -m 'ignore junkfile' .gitignore

後日、そのファイルにいくつか変更を加えます。

stackoverflow$ sed -i 's/ is / is not/' junkfile 

そしてもちろん、このファイルが .gitignore というのは、すでにgitに追跡したいことを伝えているからです。 git status が表示されます。

stackoverflow$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   junkfile
#
no changes added to commit (use "git add" and/or "git commit -a")

このファイルをリポジトリから削除する必要があります(作業ツリーからファイルを削除することなく)。 これを行うには --cached フラグを git rm :

stackoverflow$ git rm --cached junkfile
rm 'junkfile'

これは delete の操作で...

stackoverflow$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    junkfile
#

...だから、コミットする必要があるんだ。

stackoverflow$ git commit -m 'removed junkfile from repository'
[master 19f082a] removed junkfile from repository
 1 file changed, 1 deletion(-)
 delete mode 100644 junkfile

ここで git status git はこのファイルを無視します。

stackoverflow$ git status
# On branch master
nothing to commit, working directory clean

作業ツリーにはまだ残っているのに。

stackoverflow$ cat junkfile 
this file is not important